Zend_Framework中的转义输入数据

时间:2012-03-27 10:48:29

标签: 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->createRow();
   $row->field1 = $this->field_from_form1;
   $row->field2 = $this->field_from_form2;
   ....
   $row->save(); 
}

如何更好地从addRecords函数中的数组中转义输入数据?

谢谢!

2 个答案:

答案 0 :(得分:1)

Zend_Db_Table_Row::save()函数,internaly使用Zend_Db_Adapter_Abstract::insert()函数来保存数据。反过来,为您引用数据。

如果您需要构建自己的SQL查询,Zend_Db_Adapter类提供了几个引用函数供您使用。您可以在此处详细了解它们:Quoting Values and Identifiers

答案 1 :(得分:0)

据我所知,你正在以正确的方式做到这一点。如果您的表单是使用Zend_Form制作的,则可以在表单元素上添加filtersvalidators

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

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

使用Zend_Form::isValid()会检查所有validators是否正常,使用Zend_Form::getValues()会自动触发所有输入filters。由于您已经在执行此操作,因此您可能只需添加适当的filtersvalidators

使用Zend Framework的数据库工具将为您构建安全查询,以避免引用问题