Perlindungan CSRF
@csrf code> Blade untuk menjana medan token, seperti berikut: <form method="POST" action="/profile">
@csrf
...
</form>
Termasuk dalam kumpulan middleware web VerifyCsrfToken
middleware akan mengesahkan secara automatik sama ada token dalam permintaan sepadan dengan token yang disimpan dalam sesi. Token CSRF & JavaScript
Apabila membina aplikasi yang dikuasakan oleh JavaScript, adalah mudah untuk mendayakan fungsi HTTP
JavaScript Perpustakaan secara automatik melampirkan token CSRF pada setiap permintaan. Secara lalai, fail resources/js/bootstrap.js
akan menggunakan nilai dalam teg meta csrf-token
yang didaftarkan dengan pustaka fungsi HTTP Axios. Jika anda tidak menggunakan pustaka ini, anda perlu mengkonfigurasi gelagat ini secara manual untuk aplikasi anda.
@csrf
Blade 指令来生成令牌字段,如下:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken 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/*',
];
}
包含在 web 中间件组里 VerifyCsrfToken
中间件 会自动验证请求里的令牌是否与存储在会话中令牌匹配。
CSRF 令牌 & JavaScript
当构建由 JavaScript 驱动的应用时,可以方便的让 JavaScript HTTP
函数库发起每一个请求时自动附上 CSRF 令牌。默认情况下,resources/js/bootstrap.js
文件会用 Axios HTTP 函数库注册的 csrf-token
Senarai Putih CSRF
Kadangkala anda mungkin mahu menetapkan satu set URL dilindungi CSRF yang tidak diingini. Contohnya, jika anda menggunakan Stripe untuk memproses pembayaran dan menggunakan sistem webhook mereka, anda perlu mengecualikan laluan pengendali webhook Stripe daripada perlindungan CSRF kerana Stripe tidak menghantar token CSRF ke laluan anda.
Biasanya, anda boleh meletakkan jenis laluan ini di luar routes/web.php
, kerana web
middleware RouteServiceProvider
digunakan pada fail ini semua laluan dalam. Walau bagaimanapun, anda juga boleh mengecualikan perlindungan CSRF untuk laluan tersebut dengan menambahkan URL sedemikian pada atribut $except
bagi perisian tengah VerifyCsrfToken
, seperti yang ditunjukkan di bawah: routes/web.php
外,因为 RouteServiceProvider
的 web
中间件适用于该文件中的所有路由。不过,你也可以通过将这类 URL 添加到 VerifyCsrfToken
中间件的 $except
属性来排除对这类路由的 CSRF 保护,如下所示:
<meta name="csrf-token" content="{{ csrf_token() }}">
{tip} 当 运行测试 时, CSRF 中间件会自动禁用。
X-CSRF-TOKEN
除了检查 POST 参数中的 CSRF 令牌外, VerifyCsrfToken
中间件还会检查 X-CSRF-TOKEN
请求头。你应该将令牌保存在 HTML meta
标签中,如下:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
然后,一旦你创建了 meta
标签,就可以指示像 jQuery 这样的库自动将令牌添加到所有请求的头信息中。还可以为基于 AJAX 的应用提供简单,方便的 CSRF 保护。如下:
rrreee{tip} 默认情况下, resources/js/bootstrap.js
文件会用 Axios HTTP 函数库注册 csrf-token
meta 标签中的值。如果不使用这个函数库,则需要为你的应用手动配置此行为。
X-XSRF-TOKEN
Laravel 将当前的 CSRF 令牌存储在一个 XSRF-TOKEN
cookie
中,该 cookie 包含在框架生成的每个响应中。你可以使用 cookie 值来设置 X-XSRF-TOKEN
请求头。
这个 cookie 主要是作为一种方便的方式发送的,因为一些 JavaScript 框架和库,例如 Angular 和 Axios ,会自动将它的值放入 X-XSRF-TOKEN
rrreee< blockquote>
{ tip} Perisian tengah CSRF dilumpuhkan secara automatik apabila menjalankan ujian. 🎜X-CSRF-TOKEN🎜🎜Selain menyemak parameter POST Selain token CSRF dalam permintaan, perisian tengah VerifyCsrfToken
juga menyemak pengepala permintaan X-CSRF-TOKEN
. Anda harus menyimpan token dalam teg meta
HTML, seperti ini: 🎜rrreee🎜 Kemudian, setelah anda mencipta teg meta
, anda boleh mengarahkan perpustakaan seperti jQuery untuk secara automatik token ditambahkan pada maklumat pengepala semua permintaan. Ia juga boleh memberikan perlindungan CSRF yang mudah dan mudah untuk aplikasi berasaskan AJAX. Seperti berikut: 🎜rrreee🎜{tip} Secara lalai, fail resources/js/bootstrap.js
akan menggunakan pustaka fungsi HTTP Axios untuk mendaftarkan csrf-token
nilai tag meta. Jika anda tidak menggunakan pustaka ini, anda perlu mengkonfigurasi tingkah laku ini secara manual untuk aplikasi anda. 🎜
🎜🎜🎜🎜🎜X-XSRF-TOKEN🎜🎜Laravel akan arus Token CSRF disimpan dalam kuki XSRF-TOKEN
yang disertakan dengan setiap respons yang dijana oleh rangka kerja. Anda boleh menggunakan nilai kuki untuk menetapkan pengepala permintaan X-XSRF-TOKEN
. 🎜🎜Kuki ini dihantar terutamanya sebagai kemudahan, kerana sesetengah rangka kerja dan perpustakaan JavaScript, seperti Angular dan Axios, secara automatik meletakkan nilainya ke dalam pengepala X-XSRF-TOKEN
. 🎜🎜Artikel ini pertama kali diterbitkan di laman web 🎜LearnKu.com🎜. 🎜🎜