Protection CSRF
@csrf code> pour générer le champ token, comme suit : <form method="POST" action="/profile">
@csrf
...
</form>
Inclus dans le groupe middleware web VerifyCsrfToken
Le middleware vérifiera automatiquement si le token dans la requête correspond au token stocké dans la session. Jeton CSRF et JavaScript
Lors de la création d'applications alimentées par JavaScript, il est pratique d'activer les fonctions JavaScript HTTP
La bibliothèque attache automatiquement le jeton CSRF à chaque demande. Par défaut, le fichier resources/js/bootstrap.js
utilisera la valeur de la balise méta csrf-token
enregistrée auprès de la bibliothèque de fonctions HTTP Axios. Si vous n'utilisez pas cette bibliothèque, vous devez configurer manuellement ce comportement pour votre application. Liste blanche CSRF
Parfois, vous souhaiterez peut-être définir un ensemble d'URL protégées CSRF indésirables. Par exemple, si vous utilisez Stripe pour traiter les paiements et utilisez leur système de webhook, vous devrez exclure la route du gestionnaire de webhook Stripe de la protection CSRF, car Stripe n'envoie pas de jeton CSRF à votre route.
En général, vous pouvez placer ce type de route en dehors de routes/web.php
, car le middleware web
de RouteServiceProvider
s'applique à ce fichier tous itinéraires en . Cependant, vous pouvez également exclure la protection CSRF pour de telles routes en ajoutant de telles URL à l'attribut $sauf
du middleware VerifyCsrfToken
, comme indiqué ci-dessous : routes/web.php
外,因为 RouteServiceProvider
的 web
中间件适用于该文件中的所有路由。不过,你也可以通过将这类 URL 添加到 VerifyCsrfToken
中间件的 $except
属性来排除对这类路由的 CSRF 保护,如下所示:
<?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/*',
];
}
{tip} 当 运行测试 时, CSRF 中间件会自动禁用。
X-CSRF-TOKEN
除了检查 POST 参数中的 CSRF 令牌外, VerifyCsrfToken
中间件还会检查 X-CSRF-TOKEN
请求头。你应该将令牌保存在 HTML meta
标签中,如下:
<meta name="csrf-token" content="{{ csrf_token() }}">
然后,一旦你创建了 meta
标签,就可以指示像 jQuery 这样的库自动将令牌添加到所有请求的头信息中。还可以为基于 AJAX 的应用提供简单,方便的 CSRF 保护。如下:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
{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} Le middleware CSRF est automatiquement désactivé lors de l'exécution de tests. 🎜X-CSRF-TOKEN🎜🎜En plus de vérifier les paramètres POST En plus du jeton CSRF dans la requête, le middleware VerifyCsrfToken
vérifie également l'en-tête de la requête X-CSRF-TOKEN
. Vous devez enregistrer le jeton dans une balise HTML meta
, comme ceci : 🎜rrreee🎜 Ensuite, une fois que vous avez créé la balise meta
, vous pouvez demander à une bibliothèque comme jQuery de automatiquement le jeton est ajouté aux informations d’en-tête de toutes les demandes. Il peut également fournir une protection CSRF simple et pratique pour les applications basées sur AJAX. Comme suit : 🎜rrreee🎜{tip} Par défaut, le fichier resources/js/bootstrap.js
utilisera la bibliothèque de fonctions HTTP Axios pour enregistrer le csrf-token
valeur de la balise méta. Si vous n'utilisez pas cette bibliothèque, vous devrez configurer manuellement ce comportement pour votre application. 🎜
🎜🎜🎜🎜🎜X-XSRF-TOKEN🎜🎜Laravel sera le courant Le jeton CSRF est stocké dans un cookie XSRF-TOKEN
qui est inclus avec chaque réponse générée par le framework. Vous pouvez utiliser les valeurs des cookies pour définir l'en-tête de requête X-XSRF-TOKEN
. 🎜🎜Ce cookie est envoyé principalement par commodité, car certains frameworks et bibliothèques JavaScript, tels que Angular et Axios, mettent automatiquement sa valeur dans l'en-tête X-XSRF-TOKEN
. 🎜🎜Cet article a été publié pour la première fois sur le site 🎜LearnKu.com🎜. 🎜🎜