Функция csrf_field
Функция csrf_field используется в Blade-шаблонах
Laravel для создания скрытого поля ввода, содержащего
CSRF-токен. Этот токен необходим для защиты веб-форм
от CSRF-атак (межсайтовой подделки запроса).
Функция возвращает HTML-код скрытого поля с именем
'_token' и значением, равным текущему
CSRF-токену сессии.
Синтаксис
{!! csrf_field() !!}
Пример
Давайте создадим форму для отправки данных с защитой от CSRF:
<form method="POST" action="/submit">
{!! csrf_field() !!}
<input type="text" name="name">
<input type="submit" value="Submit">
</form>
Результат выполнения кода:
<form method="POST" action="/submit">
<input type="hidden" name="_token" value="abcdef1234567890">
<input type="text" name="name">
<input type="submit" value="Submit">
</form>
Пример
Альтернативный способ добавления CSRF-защиты
с использованием директивы @csrf:
<form method="POST" action="/contact">
@csrf
<input type="email" name="email">
<input type="text" name="message">
<input type="submit" value="Send">
</form>
Результат выполнения кода:
<form method="POST" action="/contact">
<input type="hidden" name="_token" value="xyz789abc123def">
<input type="email" name="email">
<input type="text" name="message">
<input type="submit" value="Send">
</form>
Пример
Проверка CSRF-токена в контроллере при обработке POST-запроса:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class FormController extends Controller
{
public function submit(Request $request)
{
$res = $request->all();
echo "Data received: " . $res['name'];
}
}
?>
Результат выполнения кода:
"Data received: John"
Важно отметить, что Laravel автоматически проверяет
CSRF-токен для всех POST, PUT, PATCH и DELETE запросов.
Если токен не совпадает, будет выброшено исключение
TokenMismatchException.
Пример
Использование функции csrf_field
вместе с методом method_field
для PUT-запроса:
<form method="POST" action="/update/1">
{!! csrf_field() !!}
{!! method_field('PUT') !!}
<input type="text" name="title">
<input type="submit" value="Update">
</form>
Результат выполнения кода:
<form method="POST" action="/update/1">
<input type="hidden" name="_token" value="def456ghi789jkl">
<input type="hidden" name="_method" value="PUT">
<input type="text" name="title">
<input type="submit" value="Update">
</form>
Смотрите также
-
функция
csrf_token,
которая возвращает только значение CSRF-токена без HTML-тегов -
функция
method_field,
которая генерирует поле для указания HTTP-метода -
функция
old,
которая возвращает старое значение поля после валидации -
функция
asset,
которая генерирует URL для статических ресурсов