Zend Framework:使用 setFromArray() 转义表单输入


Zend Framework: Escaping form input using setFromArray()

我一直在研究提高我的一些网站的安全性和稳定性,我一直在检查的一件事是转义用户的所有输入(这是我应该做的)。

在很多情况下,我使用的是标准的Zend_Db_Table_Row setFromArray() 方法,即

$myForm = new Form_MyForm();
$myTable = new Model_DbTable_MyTable();
if ($this->getRequest()->isPost()) 
{
    if ($myForm->isValid($_POST))
    {
        $myRow = $myTable->createRow();
        $myRow->setFromArray($_POST);
        $myRow->save();
    }
}  

正如预期的那样,这工作正常。但是,我不知道输入是否在此代码的任何时候被转义(就像用户的所有输入都应该在放在数据库附近的任何地方之前)。 我在 Zend 中使用 quoteInto(),但在外部也使用 mysqli_real_escape_string()。

有谁知道用户输入在上面的示例中是否被转义(为数据库做好准备),如果没有,如果我想继续使用 setFromArray() 方法,我该如何转义它?

setFromArray 不会过滤变量。用

$form->getValues() ; // not directly the $_POST

这将根据您的表单规则进行过滤/验证。

其他选项filter_var手动开机自检或Zend_Filter。

setFromArray() 只是用值填充行对象,而 save() 不执行验证检查,而是进行更新。因此,您应该在此之前进行转义/验证,并且不是自动的。您可以向窗体本身添加筛选器,然后使用 getFiltredValues/getUnfilteredValues。我认为唯一的自动转义发生在使用 Zend_Select 并且您将参数与 ?