String searchSQLFilter(String keyword){
for(String filter:new String[]{"|","&","*","%",";","-","+",",","<",">"}){
keyword=keyword.replaceAll("\\Q"+filter+"\\E", "");
}
keyword=keyword.replaceAll("'","\\\\'");
return keyword;
}
sql查询:
select * from table where title like '%"+searchSQLFilter(keyword)+"%'
我想知道,searchSQLFilter
方法是否安全?
顺便说一句:我知道这不好,使用PreparedStatement
更好
答案 0 :(得分:3)
对不起,不,不是。
创建自己的转义功能是一个坏主意:你不会抓住所有的情况。数百万用户已经尝试并测试了供应商构建的转义功能,并在必要时进行了修补。
示例:您是否考虑过字符编码?
答案 1 :(得分:1)
不是最终答案......黑名单方法只能在给定时间点安全。您错过了union
这样的复杂问题。至少'
也应包含在黑名单中。
正如您已经提到的 - 准备好的陈述更好!