Laravel - CSRF 攻擊與防御

CSRF攻擊與防御-start

  • 什么是CSRF攻擊?

    • CSRF是跨站請求偽造(Cross-site request forgery)的英文縮寫。
    • 跨站請求偽造是一種通過偽裝授權(quán)用戶的請求來利用授信網(wǎng)站的惡意漏洞。
  • 日常生活中我們應(yīng)當(dāng)怎樣預(yù)防CSRF攻擊?

    • Laravel自動為每個用戶Session生成了一個CSRF Token,該Token可用于驗證登錄用戶和發(fā)起請求者是否是同一人,如果不是則請求失敗。正是根據(jù)本特性,Laravel則提供了兩個輔助函數(shù):
      {{ csrf_field() }} 輔助函數(shù)和{{csrf_token()}}輔助函數(shù)。
    • 在我們提交表單的時候,必須要在form 表單里面加入下列中的其中一行代碼,使其生成一個隱藏域:
      <input type="hidden" name="_token" value="{{csrf_token()}}">
      ** 或者**
      {{csrf_field()}}
      這兩個函數(shù)生成的是同一個隱藏域,表單內(nèi)容如下:
      <input type="hidden" name="_token" value="4odLZvJowyNLTSATEbAn67mkua6rwFNIGJZqKlfH">
      在每一個POST提交后,都必須要有這個隱藏域,這樣就避免了CSRF攻擊。
  • 從 CSRF 保護(hù)中排除指定 URL

    • 要實現(xiàn)這一目的,只需要在 ** (app/Http/Middleware/VerifyCsrfToken.php)中間件中將要排除的 URL 添加到 $except 數(shù)組中即可。**
  • Ajax 設(shè)置CSRF-Token

    • 頁面設(shè)置head中設(shè)置:
      <meta name="csrf-token" content="{{ csrf_token() }}">

    • 基于 AJAX 的應(yīng)用提供了簡單、方便的方式來避免 CSRF 攻擊:

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

CSRF攻擊與防御-end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容