2012-01-09 66 views
0

我使用CodeIgniter的核心CSRF庫,它工作正常,但有很多地方我不需要像API調用和回調一樣的CSRF,是否有禁用庫從自動驗證POST請求,並讓我手動指定我是否要驗證。禁用自動CSRF驗證並切換到手動

實施例:

$this->security->verify_csrf(); 

P.S.我實際上修改了安全類,並且讓它工作,但我更喜歡一個只是擴展核心而不是硬編碼的解決方案。

回答

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(); 
     } 
    } 
} 
0

出現同樣的問題,我最終做的是禁用全局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 
    .... 

希望有所幫助,它可以完成工作而不會破壞核心。

+0

對不起碰到這篇文章,但我碰到這個,實現它,不幸的是,當啓用csrf時,每次提交表單時都會顯示csrf錯誤!任何想法可能發生什麼? – twistedpixel 2013-11-17 20:36:43

+0

似乎CI不會生成csrf cookie或隱藏表單元素。 – twistedpixel 2013-11-17 20:49:47