Помилка 419 або Чому не працює route в Laravel 8

Як відключити перевірку CSRF токену для певних сторінок вашого бекенду Laravel 8

Помилка 419 або Чому не працює route в Laravel 8

Цей допис суто технічний, і, як це водиться, написаний в дусі шпаргалки, тобто "для себе".
Я не девелопер, навіть кодер і не "погромізст", але в роботі devops-ів, іноді  виникають моменти, коли ти маєш бути всім, і одразу.
Якщо у вас виникла ситуація, коли ваш API запит на ваш бекенд Laravel 8 закінчується повідомленням "Сторінка застаріла" чи помилкою 419, якщо ви перебрали ручками весь код, залізли в гугл, і знайшли цей допис, сміливо читайте далі як це виправити.
Якщо все це не про вас, і ви просто зайшли сюди подивитись картинки - натисніть це посилання, картинки теж будуть.

Нумо розберімося з токеном CSRF!

Що таке в Laravel 8 той  CSRF захист (токен)? Чому він може викликати помилку 419?

XSRF/CSRF (Request Forgery) – вид вразливості, що дозволяє використовувати недоліки HTTP-протоколу. До речі, це одна з причин масового переходу на HTTPS-протокол. Зловмисники, або звичайна школота, провертає таку схему: посилання на шкідливий сайт встановлюється на сторінці, якій довіряє користувач, а далі, після переходу на шкідливу сторінку (іноді в фоновому режимі) виконується скрипт, який зберігає особисті дані користувача (паролі, платіжні дані і т.д.).
Або відправляється спам-повідомлення від особи користувача.
Чи змінюється доступ до облікового запису користувача, заради отримання повного контролю над ним.
Найбільш поширеними CSRF атаками є атаки з використанням тегу HTML <IMG>або Javascript об’єкту Іmage. Найчастіше, атакуючий додає необхідний код в електронний лист або на веб-сайті викладається заражена "картинка". Таким чином, після завантаження сторінки здійснюється запит і виконується шкідливий код.
За допомогою тегу <img>

Скриптова вставка

Javascript об'єкт Image

Як захищається від цього Laravel 8?


Кожна сторінка, за замовченням, "перевіряє" чи є у тієї сторони, яка робить запит, токен CSRF. Якщо його немає, POST запит закінчується помилкою.

Senior caucasian man holding blank empty banner covering mouth with hand, shocked and afraid for mistake. surprised expression
Photo by krakenimages / Unsplash

Що робити, щоб виправити помилку токена, коли ви впевнені в авторстві запиту?

  • Не використовувати  в контролері для даного роуту (route) перевірку на авторизованність користувача, тобто не використовувати Middleware для цих роутів
  • Відключити перевірку CSRF токену для певних сторінок вашого бекенду Laravel 8

Як відключається перевірка CSRF?

В контроллері app/Http/Middleware/VerifyCsrfToken.php, який знаходиться  в теці app/http/providers/ знайдіть метод boot() і додайте ваші посилання до масиву $except

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',  // Ваші роути тут
        'http://example.com/foo/bar', //або у вигляді абсолютних URL
        'http://example.com/foo/*',
    ];
}


Обіцяні картинки, для тих, кому ця стаття занадто технічна і нецікава :)

Здибаємося.


Share Tweet Send
You've successfully subscribed to Реінкарнація блогу Daily Buddha's Blog
Great! Next, complete checkout for full access to Реінкарнація блогу Daily Buddha's Blog
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.