Zend framework Zend_框架中的转义输入数据

Zend framework Zend_框架中的转义输入数据,zend-framework,zend-form,sql-injection,Zend Framework,Zend Form,Sql Injection,你好 我想在Zend_Framework中保存行时保护我的数据库: function addController() { .... if ($form->isValid($_POST)) { addRecods($form->getValues()); } } class DbManager extends Zend_Db_Table_Abstract ... function addRecords(array $array) { $row = $this

你好

我想在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
函数中更好地从数组中转义输入数据?


谢谢大家!

据我所知,你做这件事的方法是正确的。如果您的表单是使用
Zend_表单
创建的,您可以在表单元素上添加
过滤器
验证器

我创建的每个表单元素都会自动获取
StripTags
(删除HTML标记)和
StringTrim
(删除不需要的空白)过滤器。如果需要允许HTML,则需要将
StripTags
配置为接受特定的标记和属性

除此之外,使用验证程序将捕获大部分恶意内容。如果您有带有数值的单选按钮,则可以添加
数字
验证器。对于字符串,
Alnum
似乎给了我一些带有重音(utf8)字符串的奇怪结果,但是如果你期望基本ASCII,它可能是亚军

使用
Zend\u Form::isValid()
将检查所有
验证器是否正常,使用
Zend\u Form::getValues()
将自动触发所有输入
过滤器。由于您已经这样做了,您可能只需要添加适当的
过滤器
验证器


使用
Zend Framework
的数据库工具将为您构建一个安全查询的其余部分,以避免引号问题使用
Zend\u DB\u Table\u Row::save()
函数,内部使用
Zend\u DB\u Adapter\u Abstract::insert()
函数保存数据。依次为您引用数据


如果需要构建自己的sql查询,Zend_Db_适配器类提供了几个引用函数供您使用。您可以在此处了解更多信息:

您的表单是通过Zend_表单组件创建的吗?谢谢!在类Zend_Db_Adapter_Abstract中回答这个问题后,我发现了这个特性:公共函数insert($table,array$bind){……foreach($col=>$val){$cols[]=$this->quoteIdentifier($col,true);