我试图在我的所有表单上添加一个隐藏的输入作为 $form->create() 函数的一部分(有点像 rails 的做法),这样我就可以添加一个自定义 csrf 令牌。
无论如何我可以覆盖助手以在其后添加输入吗?
最简单的方法是添加cake 提供的安全组件。
通过使用安全组件,您可以自动获得 CSRF 和表单篡改保护。隐藏的令牌字段将自动插入表单并由安全组件检查。
无论如何,您都不应该这样做,即以您提出问题的方式(表单->创建)。创建一个助手并使用它,如果您想知道将值放在哪里,您还可以将 CSRF 存储在用户的会话中。
在 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
}
}
文档:使用和配置助手