Bundel Symfony ini memberikan perlindungan Pemalsuan Permintaan Lintas Situs (CSRF atau XSRF) untuk aplikasi sisi klien yang meminta titik akhir yang disediakan oleh Symfony melalui XHR.
Sangat dipengaruhi dan terinspirasi oleh DunglasAngularCsrfBundle
Untuk menyimpan token CSRF di sisi klien, cookie yang berisi token dapat diatur oleh satu atau lebih rute yang telah ditentukan. Bundel ini telah dikonfigurasi sebelumnya sedemikian rupa sehingga klien http sisi klien modern seperti Axios akan secara otomatis mengambil cookie tersebut. Pada permintaan berikutnya ke Symfony, token CSRF kemudian dapat ditambahkan ke header HTTP untuk divalidasi di sisi server. Sekali lagi, beberapa klien mungkin sudah melakukannya secara otomatis misalnya Axios.
Gunakan Komposer untuk menginstal bundel ini:
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
Rute dapat diatur untuk menyediakan ( create
) token, diamankan dengan ( require
) token, atau keduanya.
Karena default dari satu rute atau kumpulan rute digunakan untuk mengonfigurasi perilaku, maka hal tersebut dapat dilakukan melalui file konfigurasi atau anotasi.
# 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() '
Untuk informasi selengkapnya tentang kondisi, lihat ExpressionLanguage
Sebagai anotasi:
// 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 ()
{
// ...
}
}
Perlindungan formulir CSRF bawaan akan dinonaktifkan secara otomatis untuk rute yang dikonfigurasi untuk diamankan melalui token yang disimpan di header HTTP, asalkan token tersebut berhasil divalidasi.