我使用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