CakePHP 3.6.10 полностью отключить проверку токена CSRF - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно полностью отключить контроль токена CSRF для моего приложения. Я пытался использовать:

    public function beforeFilter(Event $event)
    {
      $this->getEventManager()->off($this->Csrf);
    }

В AppController, но, похоже, не работает. Ручная ссылка: Отключение компонента CSRF для определенных действий

Я сделал много тестов, прочитал много постов, но не смог решить.

Ty.

@ omerowitz Это мой AppController перед действием фильтра:

    public function beforeFilter(Event $event)
{
    $this->getEventManager()->off($this->Security);
    if($this->request->is('post')) {
        $this->getEventManager()->off($this->Csrf);
    }
    $this->Auth->allow(['index', 'view', 'display']);
}

но он все еще не работает, у меня все еще есть ошибка «Несоответствие токена CSRF». когда я выполняю запрос с почтальоном

РЕШЕНИЕ:

Я удалил это:

->add(new CsrfProtectionMiddleware([
     'httpOnly' => true
  ]));

Из Application.php. Почему это не указано в руководстве?

Ты все!

Ответы [ 5 ]

0 голосов
/ 11 декабря 2018

In CakePHP 3.6.10:

  1. Зайдите в src / Application.php
  2. Функция поиска промежуточное ПО
  3. Прокомментируйте следующую строку:

    -> добавить (новое CsrfProtectionMiddleware ([ 'httpOnly' => true ]));

Это полностью отключило бы проверку токена CSRF.

0 голосов
/ 07 декабря 2018

// Src / application.php

public function middleware($middlewareQueue)
{
    $middlewareQueue
        // Catch any exceptions in the lower layers,
        // and make an error page/response
        ->add(ErrorHandlerMiddleware::class)

        // Handle plugin/theme assets like CakePHP normally does.
        ->add(new AssetMiddleware([
            'cacheTime' => Configure::read('Asset.cacheTime')
        ]))

        // Add routing middleware.
        // Routes collection cache enabled by default, to disable route caching
        // pass null as cacheConfig, example: `new RoutingMiddleware($this)`
        // you might want to disable this cache in case your routing is extremely simple
        ->add(new RoutingMiddleware($this, '_cake_routes_'));

        // Add csrf middleware.
        //Comment following Code.
       /* ->add(new CsrfProtectionMiddleware([
            'httpOnly' => true
        ]));*/

    return $middlewareQueue;
}

// Ваш контроллер черепа в моем случае // UsersController:

public function beforeFilter(Event $event)
{
    parent::beforeFilter($event);
    $this->viewBuilder()->layout('admin');
    $this->getEventManager()->off($this->Security);        
}

// для метода инициализации

public function initialize()
{
    parent::initialize();
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Security');
}

Попробуй Это работает ...

0 голосов
/ 03 сентября 2018

Вы можете попробовать это

 public function beforeFilter(Event $event)
{
  $this->getEventManager()->makeMess($this->Csrf);
}

Это работает для меня!

Вы также пытаетесь использовать Python Language или Symfony 2.8.

0 голосов
/ 03 сентября 2018

Я думаю, что в Cake 3.6 Вы должны удалить CsrfProtectionMiddleware из очереди промежуточного ПО: src/Application.php

0 голосов
/ 03 сентября 2018

Вам также необходимо отключить компонент Security. Я использую это для своих контроллеров API:

$this->getEventManager()->off($this->Security);

if($this->request->is('post')) {
    $this->getEventManager()->off($this->Csrf);
}

Я отключаю его только для POST-запросов, хотя отключение Security и Csrf также будет работать.


Редактировать: Я положил его в AppController, хотя он будет работать для каждого контроллера.

Компонент безопасности, кажется, включает CSRF и фальсификацию форм.

https://book.cakephp.org/3.0/en/controllers/components/security.html

...