Цей допис суто технічний, і, як це водиться, написаний в дусі шпаргалки, тобто "для себе".
Я не девелопер, навіть кодер і не "погромізст", але в роботі 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 запит закінчується помилкою.
Що робити, щоб виправити помилку токена, коли ви впевнені в авторстві запиту?
- Не використовувати в контролері для даного роуту (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/*',
];
}
Обіцяні картинки, для тих, кому ця стаття занадто технічна і нецікава :)
Здибаємося.