2010-11-03 63 views
3

我在各地都看到了不同的評論,有人說zend框架會自動清理post/get數據,但其他人卻說不。zend框架消毒數據

這是怎麼回事?我見過在getParams中使用foreach在predispatch中執行它是最快的方法,但是有沒有人有任何建議?

回答

4

也許這筆交易是關於Zend_Controller_Request VS的Zend_Db。請求數據通常放在數據庫中。

請求對象不會逃脫任何事情。你可以強迫它使用過濾器,形成過濾器或例如使用此處描述的反射技術:

Zend_Db查詢基本上都是在其他ORM的逃脫像,像在PDO

+0

我的系統只使用zend_db(特別是Zend_Db_Table_Abstract),這是否意味着我只需要覆蓋插入方法,並在那裏逃生? – Ashley 2010-11-03 13:50:02

+1

@Ashley最簡單的方法就是試試。嘗試發佈一些數據並將其保存到數據庫。檢查保存的數據是否在定義時被清除。 – takeshin 2010-11-03 13:56:51

+0

Zend_Db使用準備語句,所以數據被轉義。 – Maxence 2010-11-03 14:11:17

4

它確實不自動消毒的任何請求的數據。它不能,因爲那需要它知道如何來清潔它,例如,應該$_GET['foo']字符串消毒或數字?你必須告訴它。

不管你在相應的控制器動作或在ActionHelper或自動在控制器插件或自舉過程中或與它們的混合物手工淨化輸入是由你。

使用什麼是適當的。

1

它絕對不會自動爲您清理變量。你可以這樣做foreach或使用array_map根據上下文,例如:

$_POST = array_map('mysql_real_escape_string', $_POST); 

理想的情況下,雖然你應該逐案處理的情況下,每個變量。我個人使用PHP的filter_var進行過濾和消毒。

+2

對於請求輸入,還有'filter_input'直接在請求超全局變量上工作。缺點是缺乏可測試性。你不能修改請求,所以你不得不做一個真正的請求,而不是使用模擬。 – Gordon 2010-11-03 12:34:32

+0

@戈登 - 是的好點忘了提一個 – robjmills 2010-11-03 12:46:38