Захист CSRF
Вступ
Laravel дозволяє легко захистити вашу програму відміжсайтовий підробку запиту(CSRF) атаки. Підроблені міжсайтові запити - це різновид зловмисного використання, за допомогою якого несанкціоновані команди виконуються від імені автентифікованого користувача.
Laravel автоматично генерує "маркер" CSRF для кожного активного сеансу користувача, керованого додатком. Цей маркер використовується для перевірки того, що автентифікований користувач є тим, хто насправді робить запити до програми.
Кожного разу, коли ви визначаєте форму HTML у своїй програмі, ви повинні включити приховане поле маркера CSRF у форму, щоб Middleware захисту CSRF могло перевірити запит. Ви можете використовувати@csrf
Директива Blade для створення поля маркера:
<form method="POST" action="/profile">
@csrf
...
</form>
VerifyCsrfToken
Middleware, що входить доweb
група проміжного програмного забезпечення, автоматично перевірить, що маркер у введеному запиті відповідає маркеру, що зберігається в сеансі.
CSRF токени та JavaScript
При створенні програм, керованих JavaScript, зручно мати, щоб ваша HTTP-бібліотека JavaScript автоматично приєднувала маркер CSRF до кожного вихідного запиту. За замовчуванням бібліотека Axios HTTP, надана вresources/js/bootstrap.js
файл автоматично надсилає файлX-XSRF-TOKEN
заголовок, використовуючи значення зашифрованогоXSRF-TOKEN
cookie. If you are not using this library, you will need to manually configure this behavior for your application.
Виключення URI із захисту CSRF
Іноді вам може знадобитися виключити набір URI із захисту CSRF. Наприклад, якщо ви використовуєтеСмугадля обробки платежів і використання їх системи webhook вам потрібно буде виключити ваш маршрут обробника веб-хука із захисту CSRF, оскільки Stripe не знатиме, який маркер CSRF надсилати на ваші маршрути.
Як правило, ви повинні розміщувати такі маршрути за межамиweb
Middleware, якеRouteServiceProvider
стосується всіх маршрутів уroutes/web.php
файл. Однак ви можете також виключити маршрути, додавши їх URI до$except
property of the VerifyCsrfToken
Middleware:
<?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',
'http://example.com/foo/*',
];
}
Middleware CSRF автоматично вимикається, колизапущені тести.
X-CSRF-TOKEN
На додаток до перевірки маркера CSRF як параметра POST, файлVerifyCsrfToken
Middleware також перевірить наявністьX-CSRF-TOKEN
заголовок запиту. Наприклад, ви можете зберегти маркер у HTMLmeta
тег:
<meta name="csrf-token" content="{{ csrf_token() }}">
Потім, як тільки ви створилиmeta
тегу, ви можете доручити бібліотеці, як jQuery, автоматично додавати маркер до всіх заголовків запиту. Це забезпечує простий, зручний захист CSRF для ваших програм на базі AJAX:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
X-XSRF-ЛОКЕН
Laravel stores the current CSRF token in an encrypted XSRF-TOKEN
cookie, який включений до кожної відповіді, сформованої фреймворком. Ви можете використовувати значення cookie, щоб встановитиX-XSRF-TOKEN
заголовок запиту.
Цей файл cookie в основному надсилається для зручності, оскільки деякі фреймворки та бібліотеки JavaScript, такі як Angular та Axios, автоматично розміщують своє значення вX-XSRF-TOKEN
заголовок на запити того самого походження.
За замовчуваннямresources/js/bootstrap.js
Файл містить бібліотеку Axios HTTP, яка автоматично надішле це для вас.