我一直在研究提高我的一些网站的安全性和稳定性,我一直在检查的一件事是转义用户的所有输入(这是我应该做的)。
在很多情况下,我使用的是标准的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 并且您将参数与 ?