top
Loading...
Mysql安全:有關“_”的搜索問題

真是寒啊~

如果不是 Babyken 的提醒,這個錯誤我想我還會一直犯下去。

事情起因,幫 Babyken 做了一個 0day 查詢的腳本,腳本很簡單,就是簡單的取用戶輸入的值做 LIKE 操作查詢數據庫。做好后經測試一直運行很好。可是今天 Babyken 告訴我說有個BUG,輸入 "___" 或 ".__" 等類似的關鍵字時,會把數據庫中的所有記錄都取出來。

偶又試了以前寫過的幾個應用,寒,都有這個問題。。。

看起來是SQL本身對LIKE的處理問題。問了幾個朋友也都沒有注意過。后來在Mysql手冊上找到答案:

Pattern matching using SQL simple regular expression comparison. Returns 1 (TRUE) or 0 (FALSE). With LIKE you can use the following two wildcard characters in the pattern:

Char Description

% Matches any number of characters, even zero characters

_ Matches exactly one character

當時感覺就是汗啊~~ 以前怎么自己就沒有注意過呢?

解決辦法是把用戶的輸入中的 _ 和 % 轉義。

不知道是只是Mysql有這個問題,還是其它數據也有。希望熟悉其它數據庫應用的朋友試一下。

相關Mysql說明頁面:http://www.mysql.com/doc/en/String_..._functions.html

補記:

與xdanger探討后發現,目前網上大部分的PHP+Mysql程序都存在此BUG,IPB和PHPBB也不例外,VBB中被過濾掉了。看起來這應該是一個值得引起重視的問題了。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗