0

我一直在考虑提高我的一些网站的安全性和稳定性,我一直在检查的一件事是逃避用户的所有输入(我应该这样做)。

在很多情况下,我使用标准 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() 方法,我该如何转义它?

4

1 回答 1

1

setFromArray 没有过滤变量。采用

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

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

其他选项是 filter_var 手动 POST 或 Zend_Filter。

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

于 2012-06-11T09:36:03.553 回答