问个 LIKE 语句sql注入的处理

场景是做个对数据库A表字段CONTENT的模糊查询。
语句类似:
PreparedStatement stmt = conn.prepareStatement("select * from A where CONTENT like ? ");
String searchString = "aa";//匹配内容
stmt.setString(1,"%" + searchString + "%");

这个语句匹配包含searchString 为"aa"内容的数据,但如果传入的不是 "aa",而含特殊的符号如 "%",
就可查询出来所有的数据。

一个解决的办法是将语句改为:"select * from A where CONTENT like ? ESCAPE '\'"
然后再对searchString进行一下预处理(在"%:","_","\" 字符前附加"\").

感觉这个方法还是比较拖沓,而且本质上还是需要程序去转义sql,而不是依赖数据库本身来处理.

不知各位有什么比较好的处理方法?

2个回答

数据库一般不提供转义功能,只有在由开发语言处理!GOOGLE搜索都把那些特殊字符过滤了!

一般是在前台做check,把%等符号作为禁止输入的字符

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐