2011-12-14 91 views
2

我在看一些Zend Framework的代碼,開發人員,我與使用工作,並在其中我看到以下內容:Zend Framework的SQL注入防護

$select = new Zend_Db_Select($DB); 
$sql = $select->where("id ='".$id."'");    

現在的$ id不被任何消毒,我的印象是,如果你使用佔位符,你只能通過Zend注入保護 - 這個字符串是脆弱的,我想。

該代碼的作者聲稱zend照顧它即使在這種情況下,雖然我找不到它所說的文檔。

任何人都可以清除,如果這實際上是安全的?

回答

5

你是對的。其他開發者錯了。

如果您查看文檔here,您可以在頁面底部找到有關討論示例#20的註釋,如果這些參數來自用戶輸入,那麼它們將受SQL注入處理。例#20或多或少與你粘貼的代碼做同樣的事情。 (雖然,你的代碼有單引號,但這當然不會讓它更安全。)

我不知道爲什麼有人會忽略佔位符,而支持這種不安全和不太乾淨的寫作方式。

0

使用佔位符,Zend會清理您的數據。

$select = new Zend_Db_Select($DB); 
$sql = $select->where("id = ? ", $id); 
+0

是的,我知道這會保護,但原作者聲稱他的意願,我相信是錯誤的。只是想驗證。 – Will 2011-12-14 22:29:45

+0

我對Zend及其衛生技術並不熟悉,但是如果它在where方法中創建字符串,可能會對其進行消毒。即它清理任何輸入到$ db_obj-> method() – Brendan 2011-12-14 22:38:14

1

我這樣做:

$id = 3; 
$where = $this->getAdapter()->quoteInto("id =?', $ id); 

結果:

id = '3' 

這種方法會自動添加單引號正確生成SQL。我認爲這非常有效。