扩展Zend请求对象的getParams()方法以清理用户输入

时间:2013-04-17 00:18:30

标签: zend-framework blacklist centralized input-sanitization

我正在努力确保通过过滤用户输入(将标签等用户数据列入黑名单)来清理我们网络应用中的用户输入。基本上,Zend建议这可以由开发人员在任何人认为是必需的地方专门完成,因此如果页面A有一个表单,则在检索表单数据之后,应该在它的pageAaction()中完成过滤。我的应用中的所有表单数据都是这样检索的:

$this->_request->getParams(); 
$this->_request->getParam('specificParamName'); // to return specific param

好吧,在我的网络应用中,所有用户输入都需要针对列入黑名单的字段进行清理。我希望显然将我的代码集中在一个地方,而不是与每个表单的黑名单进行比较。我的理解是,这应该/必须在_request对象的getParams()或getParam()方法中完成,因为这是我们总是从中检索表单数据的地方。

如果是,我怎么能这样做?我不想触及核心Zend类并添加我自己的修改。

如果没有,集中我们代码的最佳策略是什么?

免责声明:我们不使用Zend表单,而是自定义编写自己的表单

3 个答案:

答案 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)

使用getParamsgetParam不会清理表单中的数据,而应使用$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以获取更多信息。