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