#Introduction
Laravel memudahkan melindungi aplikasi Anda dari serangan lintas situs pemalsuan (CSRF). Pemalsuan permintaan lintas situs adalah jenis eksploit berbahaya di mana perintah yang tidak sah dilakukan atas nama pengguna yang diautentikasi.
Laravel secara otomatis menghasilkan "token" CSRF untuk setiap sesi pengguna aktif yang dikelola oleh aplikasi. Token ini digunakan untuk memverifikasi bahwa pengguna yang diautentikasi adalah yang benar-benar membuat permintaan ke aplikasi.
Setiap kali Anda mendefinisikan formulir HTML dalam aplikasi Anda, Anda harus menyertakan bidang token CSRF tersembunyi dalam formulir sehingga middleware perlindungan CSRF dapat memvalidasi permintaan. Anda dapat menggunakan @csrf
arahan Blade untuk menghasilkan bidang token:
<form method="POST" action="/profile">
@csrf
...
</form>
The VerifyCsrfToken
middleware , yang termasuk dalam web
kelompok middleware, otomatis akan memverifikasi bahwa token pada input permintaan cocok token disimpan dalam sesi.
JavaScript CSRF & Token
Saat membuat aplikasi yang digerakkan oleh JavaScript, akan lebih mudah untuk memiliki pustaka HTTP JavaScript Anda secara otomatis melampirkan token CSRF ke setiap permintaan keluar. Secara default, file mendaftarkan nilai tag meta dengan perpustakaan HTTP Axios. Jika Anda tidak menggunakan perpustakaan ini, Anda harus mengkonfigurasi perilaku ini secara manual untuk aplikasi Anda. resources/js/bootstrap.js
csrf-token
#Excluding URIs From CSRF Protection
Terkadang Anda mungkin ingin mengecualikan serangkaian URI dari perlindungan CSRF. Misalnya, jika Anda menggunakan Stripe untuk memproses pembayaran dan menggunakan sistem webhook mereka, Anda harus mengecualikan route handhook handler Stripe Anda dari perlindungan CSRF karena Stripe tidak akan tahu apa tanda CSRF untuk dikirim ke rute Anda.
Biasanya, Anda harus menempatkan rute semacam ini di luar web
grup middleware yang RouteServiceProvider
berlaku untuk semua route dalam file. Namun, Anda juga dapat mengecualikan rute dengan menambahkan URI mereka ke properti middleware: routes/web.php
$except
VerifyCsrfToken
<?php
namespace AppHttpMiddleware;
use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}
#X-CSRF-TOKEN
Selain memeriksa token CSRF sebagai parameter POST, VerifyCsrfToken
middleware juga akan memeriksa header permintaan. Misalnya, Anda dapat menyimpan token dalam tag HTML :X-CSRF-TOKEN
meta
<meta name="csrf-token" content="{{ csrf_token() }}">
Kemudian, setelah Anda membuat meta
tag, Anda dapat menginstruksikan perpustakaan seperti jQuery untuk secara otomatis menambahkan token ke semua header permintaan. Ini memberikan perlindungan CSRF yang sederhana dan nyaman untuk aplikasi berbasis AJAX Anda:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Secara default, file mendaftarkan nilai tag meta dengan perpustakaan HTTP Axios. Jika Anda tidak menggunakan perpustakaan ini, Anda harus mengkonfigurasi perilaku ini secara manual untuk aplikasi Anda.resources/js/bootstrap.js
csrf-token
#X-XSRF-TOKEN
Laravel menyimpan token CSRF saat ini dalam cookie yang disertakan dengan setiap respons yang dihasilkan oleh kerangka kerja. Anda dapat menggunakan nilai cookie untuk mengatur tajuk permintaan. XSRF-TOKEN
X-XSRF-TOKEN
Cookie ini terutama dikirim sebagai kenyamanan karena beberapa kerangka kerja JavaScript dan perpustakaan, seperti Angular dan Axios, secara otomatis menempatkan nilainya di header. X-XSRF-TOKEN