我正在使用CodeIgniter的核心CSRF库,它工作正常但是有很多地方我不需要像API调用和回调那样的CSRF,无论如何都禁止库自动验证POST
请求并让我手动指定我是否要验证。
示例:
$this->security->verify_csrf();
P.S。我实际上修改了安全类,我让它工作,但我更喜欢一个只扩展核心而不是硬编码的解决方案。
答案 0 :(得分:0)
为什么不扩展安全类?
<?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();
}
}
}
答案 1 :(得分:0)
遇到同样的问题,我最终做的是禁用全局CSRF验证并在控制器中进行验证。
所以在我的application / config / config.php中,我设置了
$config['csrf_protection'] = FALSE;
在我的自定义控制器(application / core / 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-&gt;保护错误。例如,我的Auth控制器禁用CSRFchecks:
class Auth extends My_Controller {
var $csrf_protection = FALSE; // don't need CSRF during login
....
希望有所帮助,它可以在不破坏核心的情况下完成工作。