2010-10-17 68 views
-1

由於一些重要原因,我不能使用ZF提供的標準方法來防止sql注入。我剛剛寫到(我在用戶的每個POST/GET數據上使用它):Zend Framework過濾器,防止sql注入

$filter = new Zend_Filter_PregReplace(); 
$filter->setMatchPattern(array("/[';`]/")) 
     ->setReplacement(array('')); 

我只使用MySQL數據庫。夠了嗎?現在安全嗎?

+0

有什麼重要的原因? – 2010-10-17 11:50:08

+0

我不能使用Zend_Dd_Table或Zend_Select或直接連接mysql,因爲使用Zend_Db_Table_Abstract將數據添加到模型對象中的數據庫中(並且更改它不是個好主意)。不錯的想法是使用Zend_Db quote()方法,但它在起始端添加了'(並且不可接受)。我正在尋找最簡單/最快的解決方案。 Zend Framework中的最佳解決方案等價於mysql_real_escape_string(),但我無法找到它。 – Luka 2010-10-17 12:10:30

+0

看不到你的觀點:)你不需要逃避兩次。你可以在模特里面逃跑,不是嗎? – 2010-10-17 15:36:49

回答

5

千萬不要使用正則表達式來做這樣的事情。如果您不能使用Zend的數據庫方法,請使用數據庫庫爲您提供的任何衛生設施。對於mySQL的程序包裝,它將是mysql_real_escape_string()。對於PDO,參數化查詢將自動處理。等等。

這就是說,我真的不明白爲什麼這是必要的第一位。爲什麼不能使用框架提供的內容?我敢打賭有一個更好的解決辦法比自己做衛生設施。

1

你真的應該使用框架提供的消毒 - Zend(PDO,ORM)。如果你不這樣做,那可能已經出錯了。

注入惡意代碼有很多情況,爲了排除所有這些代碼,您將不得不查找/滾動您自己的某種框架以確保安全。