ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 这是一种允许用户进行通配符搜索的正确方法吗?

2019-09-02 23:02:54  阅读:233  来源: 互联网

标签:java sql security wildcard parameterized-query


例如,给定一个文本框名称,用户要求希望能够进行通配符搜索(例如contains,starts with,ends with).

是否可以接受sql通配符(‘%’和’_’)作为输入,只要我仍在后端(Java)中使用参数化查询?实际上,允许用户构建自己的正则表达式,这是用户的要求所在.

例:

>用户类型

textbox = '%are%'

>此参数将作为后端提供给后端:

public class PersonDaoImpl {

        public List<Person> search(String name){//name gets the value from textbox w/ sql wildcards
        Query q = mgr.createNativeQuery('select * from Person where name like :name'); //default to always use like since expecting searchkey with sql wildcards    
        q.setParameter('name', name);//gives the input from the screen
        return q.getResultList();
        } 
}  

>结果集将包括名称为“Waren”,“Jared”,“Clare”,“Blare”的人,因为用户提供了正则表达式.

使用SQL Parameterize Query,我可以确保不会允许SQL注入.这实现了用户对通配符搜索的要求,但是它可能违反了我可能错过的任何内容吗?

更新:
刚刚发现Google也允许使用通配符,从help page开始.

解决方法:

好吧,它违反了用户需要知道(或被告知)如何构造SQL“LIKE”语法的事实,但这就是全部.您最终可能会以这种方式查询速度慢,因为它通常不能使用索引,但我不会担心安全性或正确性.

标签:java,sql,security,wildcard,parameterized-query
来源: https://codeday.me/bug/20190902/1793930.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有