2011-09-03 51 views
0
String searchSQLFilter(String keyword){   
    for(String filter:new String[]{"|","&","*","%",";","-","+",",","<",">"}){ 
     keyword=keyword.replaceAll("\\Q"+filter+"\\E", ""); 
    } 
    keyword=keyword.replaceAll("'","\\\\'"); 
    return keyword; 
} 

SQL查询:检查我的SQL查询过滤器的方法,这是安全的吗?

select * from table where title like '%"+searchSQLFilter(keyword)+"%' 

我想知道,searchSQLFilter方法是安全的?

顺便说一句:我知道这是不好的,使用PreparedStatement更好

+0

我想问你为什么要做自己的过滤? –

回答

3

对不起,不,它不是。

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

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

1

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

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