看看我的sql查询过滤方法,这样安全吗?

时间:2011-09-03 18:24:07

标签: java sql

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更好

2 个答案:

答案 0 :(得分:3)

对不起,不,不是。

创建自己的转义功能是一个坏主意:你不会抓住所有的情况。数百万用户已经尝试并测试了供应商构建的转义功能,并在必要时进行了修补。

示例:您是否考虑过字符编码?

答案 1 :(得分:1)

不是最终答案......黑名单方法只能在给定时间点安全。您错过了union这样的复杂问题。至少'也应包含在黑名单中。

正如您已经提到的 - 准备好的陈述更好!