国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

CSRF 保護

CSRF 保護


CSRF 介紹

介紹

Laravel 可以輕松使地保護你的應(yīng)用程序免受 cross-site request forgery (CSRF) 攻擊,跨站點請求偽造是一種惡意攻擊,它憑借已通過身份驗證的用戶身份來運行未經(jīng)過授權(quán)的命令。

Laravel 會自動為每個活躍的用戶的會話生成一個 CSRF「令牌」。該令牌用于驗證經(jīng)過身份驗證的用戶是否是向應(yīng)用程序發(fā)出請求的用戶。

無論何時,當(dāng)您在應(yīng)用程序中定義 HTML 表單時,都應(yīng)該在表單中包含一個隱藏的 CSRF 標(biāo)記字段,以便 CSRF 保護中間件可以驗證該請求,你可以使用 @csrf Blade 指令來生成令牌字段,如下:

<form method="POST" action="/profile">
    @csrf  
     ...
  </form>

包含在 web 中間件組里   VerifyCsrfToken  中間件 會自動驗證請求里的令牌是否與存儲在會話中令牌匹配。

CSRF 令牌 & JavaScript

當(dāng)構(gòu)建由 JavaScript 驅(qū)動的應(yīng)用時,可以方便的讓 JavaScript HTTP
函數(shù)庫發(fā)起每一個請求時自動附上 CSRF 令牌。默認情況下,resources/js/bootstrap.js 文件會用 Axios HTTP 函數(shù)庫注冊的  csrf-token  meta 標(biāo)簽中的值。如果你不使用這個函數(shù)庫,你需要手動為你的應(yīng)用配置此行為。

CSRF 白名單

有時候你可能希望設(shè)置一組不需要的 CSRF 保護的 URL 。例如,如果你正在使用  Stripe 處理付款并使用了他們的 webhook 系統(tǒng),你會需要從 CSRF 的保護中排除 Stripe webhook 處理程序路由,因為 Stripe 并不會給你的路由發(fā)送 CSRF 令牌。

典型做法,你可以把這類路由放 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} 當(dāng) 運行測試 時, CSRF 中間件會自動禁用。

X-CSRF-TOKEN

除了檢查 POST 參數(shù)中的 CSRF 令牌外, VerifyCsrfToken 中間件還會檢查 X-CSRF-TOKEN 請求頭。你應(yīng)該將令牌保存在 HTML meta 標(biāo)簽中,如下:

<meta name="csrf-token" content="{{ csrf_token() }}">

然后,一旦你創(chuàng)建了 meta 標(biāo)簽,就可以指示像 jQuery 這樣的庫自動將令牌添加到所有請求的頭信息中。還可以為基于 AJAX 的應(yīng)用提供簡單,方便的 CSRF 保護。如下:

$.ajaxSetup({
    headers: {   
         'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')  
         }
     });

{tip} 默認情況下,  resources/js/bootstrap.js 文件會用 Axios HTTP  函數(shù)庫注冊 csrf-token meta 標(biāo)簽中的值。如果不使用這個函數(shù)庫,則需要為你的應(yīng)用手動配置此行為。

X-XSRF-TOKEN

Laravel 將當(dāng)前的 CSRF 令牌存儲在一個 XSRF-TOKEN cookie
中,該 cookie 包含在框架生成的每個響應(yīng)中。你可以使用 cookie 值來設(shè)置 X-XSRF-TOKEN 請求頭。

這個 cookie 主要是作為一種方便的方式發(fā)送的,因為一些  JavaScript 框架和庫,例如 Angular 和 Axios ,會自動將它的值放入 X-XSRF-TOKEN 頭中。

本文章首發(fā)在 LearnKu.com 網(wǎng)站上。