توفر حزمة Symfony هذه حماية Cross Site Request Forgery (CSRF أو XSRF) للتطبيقات من جانب العميل التي تطلب نقاط النهاية المقدمة من Symfony من خلال XHR.
تأثرت بشدة وألهمت DunglasAngularCsrfBundle
لتخزين رمز CSRF المميز من جانب العميل، يمكن تعيين ملف تعريف ارتباط يحتوي على الرمز المميز من خلال واحد أو أكثر من المسارات المحددة مسبقًا. تم تكوين الحزمة مسبقًا بطريقة تمكن عملاء http الحديثين من جانب العميل مثل Axios من التقاط ملف تعريف الارتباط المذكور تلقائيًا. في الطلبات اللاحقة إلى 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، بشرط إمكانية التحقق من صحة الرمز المميز المذكور بنجاح.