0

我试图在我的所有表单上添加一个隐藏的输入作为 $form->create() 函数的一部分(有点像 rails 的做法),这样我就可以添加一个自定义 csrf 令牌。

无论如何我可以覆盖助手以在其后添加输入吗?

4

3 回答 3

4

最简单的方法是添加cake 提供的安全组件。

通过使用安全组件,您可以自动获得 CSRF 和表单篡改保护。隐藏的令牌字段将自动插入表单并由安全组件检查。

于 2013-04-10T15:33:06.397 回答
0

无论如何,您都不应该这样做,即以您提出问题的方式(表单->创建)。创建一个助手并使用它,如果您想知道将值放在哪里,您还可以将 CSRF 存储在用户的会话中。

于 2013-04-10T18:48:49.287 回答
0

在 CakePHP 2.x 中通过别名覆盖核心助手

在 CakePHP 2.x 中,可以通过为您自己的助手使用“别名”来覆盖默认助手。这将允许您为内置的 CakePHP 助手创建一个“插入式”替代品,而无需更改其余代码。

例如:

应用程序/控制器/AppController.php

class AppController extends Controller {
    public $helpers = array(
        'Form' => array(
            'className' => 'FancyFormHelper'
        )
    );
}

app/View/Helper/FancyFormHelper.php

App::uses('FormHelper', 'View/Helper');

class FancyFormHelper extends FormHelper {
    
    public function create($model = null, $options = array())
    {
        $output = parent::create($model, $options);

        // append your hidden fields 
        return $output . $this->createCSRFfield(); // Or whatever you name your method
    }
}

文档:使用和配置助手

于 2013-04-10T21:32:59.890 回答