我正在努力确保通过过滤用户输入(将标签等用户数据列入黑名单)来清理我们网络应用中的用户输入。基本上,Zend建议这可以由开发人员在任何人认为是必需的地方专门完成,因此如果页面A有一个表单,则在检索表单数据之后,应该在它的pageAaction()中完成过滤。我的应用中的所有表单数据都是这样检索的:
$this->_request->getParams();
$this->_request->getParam('specificParamName'); // to return specific param
好吧,在我的网络应用中,所有用户输入都需要针对列入黑名单的字段进行清理。我希望显然将我的代码集中在一个地方,而不是与每个表单的黑名单进行比较。我的理解是,这应该/必须在_request对象的getParams()或getParam()方法中完成,因为这是我们总是从中检索表单数据的地方。
如果是,我怎么能这样做?我不想触及核心Zend类并添加我自己的修改。
如果没有,集中我们代码的最佳策略是什么?
免责声明:我们不使用Zend表单,而是自定义编写自己的表单
答案 0 :(得分:4)
您可以扩展控制器类以实现自定义功能以清理输入
class UserController extends Custom_Controller_Abstract
{
$user = $this->getSafeParam('userid');
}
库/ custom / controller / Abstract.php中的
class Custom_Controller_Abstract extends Zend_Controller_Action
{
public function getSafeParam($paramName)
{
return sanitize($this->getRequest()->getParam($key));
}
protected function sanitize($value)
{
return $value;
}
}
答案 1 :(得分:0)
使用getParams
或getParam
不会清理表单中的数据,而应使用$form->getData($post)
或$form->getValidData($post)
。
然而,我也问过这个问题zend framework sanitizing data,并且在那里有一些很好的答案 - 其中一个说不按你的意愿去做(和我一样)。
答案 2 :(得分:0)
Zend让我们执行自己的数据卫生,因为需求在不同领域之间发生了很大的变化。
您显然没有使用Zend_Form来构建表单,或者您将使用Zend_Form
中包含的标准过滤器和验证器。
您可以访问Zend_Form在不使用Zend_form时使用的相同验证器和过滤器。
使用Zend_Filter_Input
时可以使用这些功能。
Zend_Filter_Input专门用于过滤和验证附带数组中包含的信息,例如提供的信息,购买$_GET
或$_POST
数组。
基本用法全部在控制器/动作中:
$filters = array(
//month is the array key, Digits is the name of the filter class
'month' => 'Digits',
//account is the array key, Digits is the name of the filter class
'account' => 'StringTrim'
);
$validators = array(
//account is the array key, Digits is the name of the validator class
'account' => 'Alpha',
//* is a valid wildcard for validators and filters
'*' => 'NotEmpty'
);
$data = $this->getRequest()->getPost();
//everything in the constructor
$input = new Zend_Filter_Input($filters, $validators, $data);
//or
$input = new Zend_Filter_Input($filters, $validators);
$input->setData($data);
使用过滤器和验证器可以完成更多工作,请查看Zend_Filter_Input以获取更多信息。