2012-01-09 2 views
0

Я использую основную CSRF-библиотеку CodeIgniter, она работает нормально, но есть так много мест, где мне не нужны CSRF, такие как вызовы API и обратные вызовы, есть ли вообще отключить библиотеку от автоматической проверки 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 и выполнить ее в контроллере.

Так что в моем приложении/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, как мне нужно. Например, мой контроллер Auth отключает CSRFchecks:

class Auth extends My_Controller { 
    var $csrf_protection = FALSE; // don't need CSRF during login 
    .... 

Надежда, что помогает, она получает работу без взлома ядра.

+0

Извините, что ударил этот пост, но я натолкнулся на это, внедрил его, и, к сожалению, происходит то, что когда csrf включен, он отображает ошибку csrf каждый раз при отправке формы! Любые идеи, что может произойти? – twistedpixel

+0

Кажется, что CI не генерирует csrf cookie или элемент скрытой формы. – twistedpixel

Смежные вопросы