我使用CodeIgniter的核心CSRF库,它工作正常,但有很多地方我不需要像API调用和回调一样的CSRF,是否有禁用库从自动验证POST
请求,并让我手动指定我是否要验证。禁用自动CSRF验证并切换到手动
实施例:
$this->security->verify_csrf();
P.S.我实际上修改了安全类,并且让它工作,但我更喜欢一个只是扩展核心而不是硬编码的解决方案。
我使用CodeIgniter的核心CSRF库,它工作正常,但有很多地方我不需要像API调用和回调一样的CSRF,是否有禁用库从自动验证POST
请求,并让我手动指定我是否要验证。禁用自动CSRF验证并切换到手动
实施例:
$this->security->verify_csrf();
P.S.我实际上修改了安全类,并且让它工作,但我更喜欢一个只是扩展核心而不是硬编码的解决方案。
为什么不扩展安全类?
<?php
class MY_Security extends CI_Security {
public function csrf_verify()
{
$bypass_csrf = TRUE; // some logic to bypass csrf goes here
if ($bypass_csrf)
{
return $this->csrf_set_cookie();
}
else
{
return parent::csrf_verify();
}
}
}
出现同样的问题,我最终做的是禁用全局CSRF验证并在控制器中执行。
所以在我的application/config/config.php文件,我设置
$config['csrf_protection'] = FALSE;
在我的自定义控制器(应用/核心/ MY_Controller.php)我要控制csrf_protection像这样的属性:
class MW_Controller extends CI_Controller {
var $csrf_protection = TRUE; // on by default
function __construct()
{
parent::__construct();
if ($this->csrf_protection)
{
$this->security->csrf_verify();
}
}
....
我的其他控制器扩展了MY_Controller,所以我可以根据需要设置$ csrf-> protection false。例如,我的身份验证控制器禁用CSRFchecks:
class Auth extends My_Controller {
var $csrf_protection = FALSE; // don't need CSRF during login
....
希望有所帮助,它可以完成工作而不会破坏核心。
对不起碰到这篇文章,但我碰到这个,实现它,不幸的是,当启用csrf时,每次提交表单时都会显示csrf错误!任何想法可能发生什么? – twistedpixel 2013-11-17 20:36:43
似乎CI不会生成csrf cookie或隐藏表单元素。 – twistedpixel 2013-11-17 20:49:47