Php Zend框架:使用setFromArray()转义表单输入
我一直在考虑提高我的一些网站的安全性和稳定性,我一直在检查的一件事是逃避用户的所有输入(这是我应该做的) 在很多情况下,我使用标准的Zend_Db_Table_Row setFromArray()方法,即Php Zend框架:使用setFromArray()转义表单输入,php,zend-framework,zend-form,sql-injection,zend-db,Php,Zend Framework,Zend Form,Sql Injection,Zend Db,我一直在考虑提高我的一些网站的安全性和稳定性,我一直在检查的一件事是逃避用户的所有输入(这是我应该做的) 在很多情况下,我使用标准的Zend_Db_Table_Row setFromArray()方法,即 $myForm = new Form_MyForm(); $myTable = new Model_DbTable_MyTable(); if ($this->getRequest()->isPost()) { if ($myForm->isValid($_POS
$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()
是否有人知道在上面的示例中用户输入是否已转义(已准备好用于DB),如果不知道,如果要继续使用setFromArray()方法,如何转义?setFromArray没有过滤变量。使用
$form->getValues() ; // not directly the $_POST
这将根据表单规则进行筛选/验证
其他选项包括手动过滤POST或Zend_过滤器
setFromArray()只是用值填充row对象,save()不进行验证检查,而是进行更新。因此,您应该在这之前进行转义/验证,这不是自动的。您可以将筛选器添加到表单本身,然后使用GetFilteredValues/getUnfilteredValues。我认为唯一的自动转义是在使用Zend_Select并将参数与绑定时发生的?谢谢Elzo,我只是很快地将该示例放在一起,但会注意在所有实例中使用getValues()。问题仍然存在:用户的输入是否自动转义(与验证不同)。我知道过滤器可以做一些这方面的工作,但这是否意味着我必须在每个输入中添加一个过滤器以阻止注入攻击?setFromArray()只是用值填充row对象,而save()不进行验证检查,它进行更新。因此,您应该在这之前进行转义/验证,这不是自动的。您可以将筛选器添加到表单本身,然后使用GetFilteredValues/getUnfilteredValues。我认为唯一的自动转义发生在使用Zend_Select并将参数绑定到?哇,谢谢Elzo,为我标记您的答案为正确。我感到惊讶的是,我在网上看到的通过电子邮件将表单保存到数据库的例子都没有。setFromArray()显示任何转义数据。这些示例只解释了一点,而不是真实世界的真实复杂性。@elzo您上面的评论比您的答案更具解释性,应该编辑成优秀的:)