Этот пакет Symfony обеспечивает защиту от подделки межсайтовых запросов (CSRF или XSRF) для клиентских приложений, запрашивающих конечные точки, предоставляемые Symfony через XHR.
Находится под сильным влиянием и вдохновением DunglasAngularCsrfBundle.
Для хранения токена CSRF на стороне клиента файл cookie, содержащий токен, может быть установлен одним или несколькими заранее определенными маршрутами. Пакет предварительно настроен таким образом, что современные http-клиенты на стороне клиента, такие как Axios, автоматически получают указанный файл cookie. При последующих запросах к Symfony токен CSRF может быть добавлен в заголовок HTTP для проверки на стороне сервера. Опять же, некоторые клиенты могут уже делать это автоматически, например Axios.
Используйте Composer для установки этого пакета:
composer require dneustadt/csrf-cookie-bundle
# config/packages/dneustadt_csrf_cookie.yaml
dneustadt_csrf_cookie :
# Generally enable/disable the CSRF protection
enable : true
# ID used to generate token
id : csrf
# Name of the cookie the token is stored in
name : XSRF-TOKEN
# Cookie expiration
expire : 0
# Cookie path
path : /
# Cookie domain
domain : null
# Cookie HttpOnly
httpOnly : true
# Cookie secure
secure : false
# Name of the HTTP header the token is expected to be stored in
header : X-XSRF-TOKEN
# Cookie same site policy
sameSite : lax
Маршруты могут быть настроены либо для предоставления ( create
) токена, либо для защиты ( require
) токена, либо для того и другого.
Поскольку для настройки поведения используются значения по умолчанию для одного маршрута или коллекции маршрутов, это можно сделать либо с помощью файлов конфигурации, либо с помощью аннотаций.
# config/routes.yaml
api_controllers :
resource : ../src/Controller/Api
type : annotation
defaults :
csrf :
# bool or array of allowed methods
create : true
# bool or array of allowed methods
require :
- ' POST '
- ' PUT '
- ' PATCH '
- ' DELETE '
# array of route names to be excluded from create/require in this collection
exclude :
- ' app_api_blog_index '
# additional condition using ExpressionLanguage syntax
condition : ' request.isXmlHttpRequest() '
Для получения дополнительной информации об условиях см. ExpressionLanguage.
В качестве аннотации:
// src/Controller/Api/ExampleController.php
namespace App Controller Api ;
// ...
class ExampleController extends AbstractController
{
/**
* @Route("/api/index", methods={"GET","HEAD"}, defaults={"csrf": {"create": true}})
*/
public function index ()
{
// ...
}
}
Встроенная защита форм CSRF будет автоматически отключена для маршрутов, которые настроены на защиту с помощью токена, хранящегося в заголовке HTTP, при условии, что указанный токен может быть успешно проверен.