有没有办法自动过滤Zend中的getRequest()参数?

时间:2009-05-14 20:43:27

标签: php zend-framework

如果我不需要,我不想在每个getRequest-> getParam('x')之后在我的代码中调用Zend过滤器。是否有一种懒惰的方法可以神奇地过滤getRequest中的所有内容?

编辑: 当我说过滤器时,我的意思是,转义标签,清除XSS,并转义任何sql转义字符。

即:

$myVar = $this->getRequest()->getParam('x');
filter the variable, escape sql stuf... etc 

标准是什么?你是怎么做到的?

4 个答案:

答案 0 :(得分:6)

有几种方法可以解决您的情况。

首先,您可以立即获得所有参数:

$params = $this->_request->getParams(); //_request is equivalent to getRequest()

因此,过滤掉所有参数的懒惰方法是在声明过滤器时使用*****,这意味着所有字段,并且看起来像:

$filters = array('*' => array('StringTrim','HtmlEntities','StripTags'));
$input = new Zend_Filter_Input($filters,$validators,$params);
if($input->isValid()) {
     //blah blah blah
}

您应该详细了解request对象,以及filtersinput filtersvalidators

答案 1 :(得分:1)

唯一的办法是各方面都这样做。

  • 使用Zend_Filter_Input(如上面karim79所述)过滤内容应该如何存储或查找(使用StripTags剥离标记,转换为IntStringTrim等),验证需要验证的地方 - 但不是htmlentities,因为这可能应该在输出上完成,以避免数据库搜索中的复杂性等。在大多数情况下,字段应单独筛选/验证。

    < / LI>
  • 始终使用参数化查询(Zend_Db_Select与?占位符),或者至少使用db escape函数

  • 根据需要转义所有输出(Zend_View_Helper_Escape - &gt; $this->escape())。

答案 2 :(得分:0)

karim79的答案涵盖了在一个阵列中抓住params。

通常,您不应在每个请求的基础上使用Zend_Filter来清理数据。

要防止XSS,您应该在视图中转义数据输出:

$this->escape($someUserSuppliedData)

当处理Zend_Db时,一些方法(如插入和更新)将为您引用数据。手动构建查询时,可以使用Zend_Db函数,如quote

答案 3 :(得分:0)

也许他正在寻找一种方法来重载getRequest()方法,然后在新创建的方法中过滤请求对象。

退房:http://framework.zend.com/manual/en/zend.controller.plugins.html

然后你可以使用Zend_Filter类或者创建你自己的过滤器类重载上面的..