Laravel - Защита от CSRF

Привет, начинающие разработчики! Сегодня мы окунемся в мир защиты от CSRF в Laravel. Не волнуйтесь, если вы новички в программировании; я проведу вас через это шаг за шагом, как я делал это для countless студентов на протяжение лет моего преподавания. Давайте начнем это захватывающее путешествие вместе!

Laravel - CSRF Protection

Что такое CSRF?

Прежде чем мы перейдем к реализации Laravel, давайте поймем, что такое CSRF. CSRF означает Cross-Site Request Forgery (М межсайтовая подделка запросов). Представьте, что вы находитесь в кофейне, наслаждаетесь капучино и проверяете свой банковский счет на ноутбуке. Внезапно, шаловливый хакер, сидящий рядом, обманывает ваш браузер, чтобы он сделал запрос на перевод денег с вашего счета на свой. Это и есть CSRF в действии!

Why is CSRF Protection Important?

Атаки CSRF могут быть катастрофическими. Они могут привести к выполнению неавторизованных действий от имени аутентифицированных пользователей. В нашей кофейной сцене вы могли бы потерять свои заработанные деньги! Вот почему нам нужна защита от CSRF, и Laravel всегда рядом.

Реализация защиты от CSRF в Laravel

Laravel делает очень легко защитить ваше приложение от атак CSRF. Давайте разберемся, как это работает.

Токен CSRF

В основе защиты от CSRF в Laravel лежит уникальный токен. Представьте этот токен как секретный握手 между вашим приложением и браузером пользователя.

Вот как вы включаете этот токен в свои формы:

<form method="POST" action="/profile">
@csrf
...
</form>

Директива @csrf генерирует скрытое поле ввода с токеном CSRF. Это как если бы вы дали вашей форме секретный пароль!

Middleware для проверки CSRF

Laravel использует middleware для проверки токена CSRF для каждого запроса POST, PUT, PATCH или DELETE. Это как если бы у вас был охранник, проверяющий паспорта у входа в俱乐部.

Вот как выглядит middleware за кулисами:

<?php

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends Middleware
{
/**
* URI, которые должны быть исключены из проверки CSRF.
*
* @var array
*/
protected $except = [
//
];
}

Этот middleware автоматически применяется ко всем веб-маршрутам. Это как если бы у вас был невидимый щит, защищающий ваше приложение!

Исключение URL из защиты CSRF

Иногда вы можете захотеть пропустить某些 URL через защиту CSRF. Например, если вы создаете API, который будут использовать другие приложения. Вы можете исключить эти URL, добавив их в массив $except в middleware VerifyCsrfToken:

protected $except = [
'api/*',
'webhook/*',
];

Это как если бы вы дали certain VIP-персонам пропуск для пропуска security check у входа в наш клуб.

X-CSRF-TOKEN

Для AJAX-запросов Laravel позволяет отправлять токен CSRF в пользовательском HTTP-заголовке под названием X-CSRF-TOKEN. Вот как вы можете настроить это:

<meta name="csrf-token" content="{{ csrf_token() }}">

Затем, в вашем JavaScript (используя jQuery в качестве примера):

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

Это как если бы вы дали вашим AJAX-запросам особый значок, говорящий: "Я авторизован!"

X-XSRF-TOKEN

Laravel также устанавливает токен CSRF в cookie под названием XSRF-TOKEN. Многие JavaScript-фреймворки, такие как Angular, автоматически используют этот cookie.

Если вы не используете эти фреймворки, вы можете отправить токен вручную:

var token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

Это как если бы вы дали вашему приложению secret decoder ring для проверки запросов!

Методы защиты от CSRF

Вот таблица, резюмирующая методы защиты от CSRF, которые мы обсуждали:

Метод Описание
@csrf директива Генерирует скрытое поле ввода с токеном CSRF
Middleware VerifyCsrfToken Автоматически проверяет токен CSRF для POST, PUT, PATCH, DELETE запросов
X-CSRF-TOKEN заголовок Позволяет отправлять токен CSRF в пользовательском HTTP-заголовке для AJAX-запросов
XSRF-TOKEN cookie Устанавливает токен CSRF в cookie для использования JavaScript-фреймворками

Заключение

И вот мы arrived, будущие кодировщики! Мы совершили путешествие по миру защиты от CSRF в Laravel. Помните, что защита вашего приложения - это критически важно, и Laravel делает это проще простого.

Как я всегда говорю своим студентам, представляйте защиту от CSRF как охранника в самом модном клубе в городе. Он обеспечивает, чтобы только авторизованные запросы passes через, сохраняя ваше приложение в безопасности от шаловливых party crashers.

Продолжайте практиковаться, stay curious, и antes de que te das cuenta, ты будешь создавать безопасные приложения Laravel, как профессионал! Счастливого кодирования!

Credits: Image by storyset