2012-03-27 35 views
0

美好的一天!
Zend_Framework中的轉義輸入數據

我要保護我的數據庫,當我保存行的Zend_Framework:

function addController() { 
.... 
    if ($form->isValid($_POST)) { 
    addRecods($form->getValues()); 
    } 
} 

class DbManager extends Zend_Db_Table_Abstract 
... 
function addRecords(array $array) { 
    $row = $this->createRow(); 
    $row->field1 = $this->field_from_form1; 
    $row->field2 = $this->field_from_form2; 
    .... 
    $row->save(); 
} 

我怎樣才能更好地從陣列中的addRecords功能逃脫輸入數據?

謝謝!

+0

你的表單是通過Zend_Form組件創建的嗎? – Liyali 2012-03-27 11:11:11

回答

1

Zend_Db_Table_Row::save()功能,internaly使用Zend_Db_Adapter_Abstract::insert()功能來保存數據。反過來,它會爲您引用數據。

如果您需要構建自己的sql查詢,則Zend_Db_Adapter類會提供多個引用函數供您使用。你可以在這裏閱讀更多關於它們的信息:Quoting Values and Identifiers

+0

謝謝!我在Zend_Db_Adapter_Abstract的類中找到了這個特性:公共函數insert($ table,array $ bind) { .... foreach($ bind as $ col => $ val){ $ cols [] = $ this-> quoteIdentifier($ col,true); – vedmed 2012-03-28 05:36:27

0

據我所知,你正在做正確的方法。如果您的表單是使用Zend_Form製作的,則可以在表單元素上添加filtersvalidators

我創建的每個表單元素都會自動獲取StripTags(刪除HTML標記)和StringTrim(刪除不需要的空白)過濾器。如果您需要允許HTML,則需要將StripTags配置爲接受特定標籤和屬性。

在此之上,使用驗證器將捕獲大多數惡意內容。如果您的單選按鈕帶有數字值,則可以添加Digit驗證程序。對於字符串的Alnum似乎給我怪異的結果重音(UTF8)字符串,但如果你認爲基本的ASCII,它可能是一個亞軍

使用Zend_Form::isValid()將檢查所有的validators都OK,並自動使用Zend_Form::getValues()會觸發所有輸入filters。既然你已經這樣做了,你可能只需要添加適當的filtersvalidators

使用Zend Framework的數據庫工具會做建設平安查詢的其餘爲您避免報價發出

+0

謝謝你的回答! – vedmed 2012-03-28 05:28:58