Protection CSRF


Chaque fois que vous définissez un formulaire HTML dans votre application, vous devez inclure un champ de balise CSRF masqué dans le formulaire afin que le middleware de protection CSRF puisse valider la demande, vous pouvez utiliser la directive Blade @csrf 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 外,因为 RouteServiceProviderweb 中间件适用于该文件中的所有路由。不过,你也可以通过将这类 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-TOKENrrreee< 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🎜. 🎜🎜