Отключите автоматическую проверку CSRF и переключитесь на ручной - PullRequest
0 голосов
/ 09 января 2012

Я использую базовую библиотеку CSRF CodeIgniter, она работает нормально, однако есть много мест, где мне не нужен CSRF, например, вызовы API и обратные вызовы. Есть ли способ отключить автоматическую проверку POST запросов имне нужно вручную указать, хочу ли я проверять или нет.

Пример:

$this->security->verify_csrf();

PS Я действительно изменил класс безопасности и получил его на работу, но я предпочитаю решение, которое просто расширяетядро вместо жесткого его кодирования.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2012

Столкнулся с той же проблемой, что я закончил тем, что отключил глобальную проверку CSRF и сделал это в контроллере.

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

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

Надеюсь, что это помогает, он выполняет свою работу без взлома ядра.

0 голосов
/ 09 января 2012

Почему бы не расширить класс безопасности?

<?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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...