2011-09-03 52 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這樣的複雜結構。至少'也應包含在黑名單中。

正如您已經提到的 - 準備好的陳述更好!