如果我不需要,我不想在每个getRequest-> getParam('x')之后在我的代码中调用Zend过滤器。是否有一种懒惰的方法可以神奇地过滤getRequest中的所有内容?
编辑: 当我说过滤器时,我的意思是,转义标签,清除XSS,并转义任何sql转义字符。
即:
$myVar = $this->getRequest()->getParam('x');
filter the variable, escape sql stuf... etc
标准是什么?你是怎么做到的?
答案 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对象,以及filters,input filters和validators。
答案 1 :(得分:1)
唯一的办法是各方面都这样做。
使用Zend_Filter_Input
(如上面karim79所述)过滤内容应该如何存储或查找(使用StripTags
剥离标记,转换为Int
, StringTrim
等),验证需要验证的地方 - 但不是htmlentities,因为这可能应该在输出上完成,以避免数据库搜索中的复杂性等。在大多数情况下,字段应单独筛选/验证。
始终使用参数化查询(Zend_Db_Select
与?占位符),或者至少使用db escape函数
根据需要转义所有输出(Zend_View_Helper_Escape
- > $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类或者创建你自己的过滤器类重载上面的..