2010-09-23 68 views
6

我想採取用戶輸入,表示爲$ dangerous_string,並將其用作MySQL查詢中RegEx的一部分。在MySQL中正則表達式逃避用戶輸入的最佳方式是什麼?

要做到這一點,最好的方法是什麼?我想用用戶的字符串作爲文字 - 如果它包含任何在MySQL RegEx中含義的字符,這些字符實際上不應該影響我的正則表達式。

$dangerous_string = $_GET["string"]; 
//do something here 
$dangerous_string = what_goes_here($dangerous_string); 
$sql = "SELECT * FROM table WHERE search_column REGEX '[[:<:]]$dangerous_string'"; 

//etc.... 

回答

2

據我所知,有逃避的MySQL正則表達式中沒有原生的方式。你可以在PHP中用preg_quote(http://www.php.net/manual/en/function.preg-quote.php)來完成,這可能會爲你做好工作,但顯然不是爲此目的而設計的。

我首選的方式,如果我是你的情況是構建在PHP中的正則表達式白名單,然後可以應用到你的危險字符串:

$safeString = preg_replace('/[^\w]/','',$dangerousString); 

這消除了任何非單詞字符(即除了什麼A-Za-z0-9_)。

NB我相信給出的其他答案不會刪除/轉義正則表達式特殊字符,我相信這是您的要求。

+0

這將工作得很好。謝謝! – Sambo 2010-09-23 21:02:45

-2

在傳遞到數據庫之前,您需要確保報價和標記正確處理 。最好的方法是:

mysql_real_escape_string ([php doc][1]) 

此方法在PHP和C++ mysql客戶端庫都可用。

這應確保任何'dangerous_string'不再危險 並且可以在RegEx使用的帶引號的字符串中使用。

+0

對於REGEXP的解釋不做任何事情,這是個問題。 – Wrikken 2010-09-23 20:58:27

相關問題