CakePHP形式篡改

时间:2015-06-12 11:40:01

标签: forms cakephp cakephp-2.0

我在CakePHP 2中制作的表单有问题。

表格提交工作正常,但随后我改变了它,现在我也提交了其他一些东西。我也做了这样,以便用户可以选择他要提交的“服务”的数量。

现在,只有在精确的1“服务”时,表单才会提交。 我认为te问题存在于“形式篡改”保护中。 由于我希望用户“篡改”表单,如何禁用此保护?

我的beforeFilter看起来像这样:

parent::beforeFilter();

    $this->Auth->allow('register_new');

    // Security component
    if (isset($this->Security) &&
        $this->RequestHandler->isAjax() &&
        ($this->action == 'statistics'))
    {
        // $this->Security->validatePost = false;
        $this->Security->csrfCheck = false;
    }

    if (isset($this->Security) &&
        $this->RequestHandler->isAjax() &&
        ($this->action == 'markPaid'))
    {
        $this->Security->validatePost = false;
        $this->Security->csrfCheck = false;
    }

有问题的“行动”(没有获得任何数据的行为)是“register_new”。

1 个答案:

答案 0 :(得分:3)

代码

$this->Auth->allow('register_new');

无需身份验证即可访问register_new,但不会禁用表单篡改保护。

if($this->request->params['action'] == 'register_new')
{
    $this->Security->validatePost = false;
}

或者,您也可以仅使用

在某些字段上禁用POST验证
$this->Security->unlockedFields = array('field_1', ...);

具有保持对其他人的验证的优势。

请参阅http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html#form-tampering-prevention