Функция csrf_token
Функция csrf_token используется в шаблонах Twig для генерации скрытого токена, который защищает формы от атак CSRF (Cross-Site Request Forgery). Первым параметром передаётся строковый идентификатор токена, обычно совпадающий с именем действия или формы. Вторым необязательным параметром можно указать область видимости токена.
Синтаксис
{{ csrf_token(id) }}
{{ csrf_token(id, scope) }}
Пример
Давайте сгенерируем CSRF-токен для формы добавления статьи и выведем его в скрытом поле:
<form action="{{ path('article_create') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token('article_form') }}">
<input type="text" name="title">
<button type="submit">Save</button>
</form>
Результат выполнения кода:
<form action="/article/create" method="post">
<input type="hidden" name="_token" value="a1b2c3d4e5f6...">
<input type="text" name="title">
<button type="submit">Save</button>
</form>
Пример
Давайте проверим токен в контроллере с помощью метода isCsrfTokenValid:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/create', name: 'article_create', methods: ['POST'])]
public function create(Request $request): Response
{
$token = $request->request->get('_token');
if (!$this->isCsrfTokenValid('article_form', $token)) {
return new Response('Invalid CSRF token', 403);
}
return new Response('Article created');
}
}
?>
Результат выполнения кода при корректном токене:
"Article created"
Смотрите также
-
функция
path,
которая генерирует URL по имени маршрута -
функция
url,
которая генерирует абсолютный URL -
функция
is_granted,
которая проверяет права доступа пользователя -
функция
render,
которая рендерит фрагмент шаблона