用品

Laravel Web 安全:什麼是跨站請求偽造 (CSRF)?

在本 Laravel 教程中,我們討論了 Web 安全以及如何保護 Web 應用程序免受跨站點請求偽造或 CSRF 攻擊。

CSRF 是由攻擊者執行的惡意活動,攻擊者代表經過身份驗證的用戶執行操作,對 Web 安全有害。 幸運的是,Laravel 提供了防止此類漏洞的工具。

什麼是CSRF?

CSRF 攻擊劫持用戶會話。 他們通過在用戶不知情的情況下通過隱藏的表單標籤或惡意 URL(圖像或鏈接)誘騙用戶提交請求來做到這一點。

這種攻擊會導致用戶會話狀態發生變化、數據洩露,有時黑客還可以操縱應用程序中的最終用戶數據。

上圖說明了網絡安全遭到破壞的場景。 受害者通過單擊鏈接(已收到)發送請求,將請求發送到網站服務器,這將產生黑客所需的效果,黑客將獲得對訪問和操縱網站服務器有用的信息。

如何防止 CSRF 請求

為了提高 安全 在你的應用程序的 web 中,在每個用戶會話中,Laravel 生成安全令牌,它使用它來確保經過身份驗證的用戶是請求應用程序的用戶。

由於每次重新生成用戶會話時此令牌都會更改,因此攻擊者無法訪問它。

每當有更改服務器端(後端)用戶信息的請求時,例如 POSTPUTPATCHDELETE,您必須包含指令 @csrf 在申請表中 blade HTML。 這 @csrf 因此它是一個指令 Blade 用於生成由應用程序驗證的隱藏令牌。

該指令 Blade 是 Laravel 模板引擎中使用的語法,稱為 刀片 . 創建文件 blade 你必須給它一個名字——在我們的案例中——然後是刀片的擴展。 這意味著該文件將具有名稱 form.blade.php.

該文件被使用 blade 在網頁上為用戶呈現視圖。有幾個預先指令defi您可以使用 nite 或 Blade 速記語法。 例如, @if 檢查條件是否滿足, @empty 檢查記錄是否不為空, @auth 檢查用戶是否通過身份驗證等。

但是讓我們回到指令 @csrf. 以下是您如何使用它:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

以前版本的 Laravel 有不同的設置:它們都工作並且做同樣的事情。

相關文章
創新通訊
不要錯過有關創新的最重要新聞。 註冊以通過電子郵件接收它們。
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

當正在提交的表單請求中缺少 CSRF 令牌或者它看起來無效時,Laravel 會拋出一個“頁面已過期”錯誤消息和 419 狀態代碼。

CSRF 驗證如何以及在何處進行

中間件 VerifyCsrfToken 在 Laravel 應用程序中處理 CSRF 驗證。 這 middleware 註冊於 Kernel.php 並且位於目錄中 app/Http/Middleware. 這意味著 middleware 它是為網絡中的請求觸發的,與 API 無關。

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

VerifyCsrfToken 中間件擴展類 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken,即 CSRF 驗證是 defi晚上在班級裡。

讓我們更深入地了解 Laravel 如何處理 CSRF 驗證。

在類裡面,我們有函數 tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

在代碼中確定會話和輸入的 CSRF 令牌是否匹配。

該函數做了兩件事:

  1. 得到 $this->getTokenFromRequest 來自通過隱藏字段或請求標頭附加的傳入請求的令牌。 令牌被解密,然後返回到令牌變量。
protected function getTokenFromRequest($request)
{
    $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

    if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
        try {
            $token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
        } catch (DecryptException $e) {
            $token = '';
            }
    }

    return $token;
}

在代碼中,它從標頭獲取令牌

2.將請求令牌和會話都轉換為字符串,然後使用 hash_equals 內置 PHP 以比較兩個字符串是否相等。 這個操作的結果總是 布爾(真)或(假) .

Ercole Palmeri

創新通訊
不要錯過有關創新的最重要新聞。 註冊以通過電子郵件接收它們。

最近的文章

Reply 使 MLFRAME 可用 Reply,一個基於生成人工智慧的框架,應用於知識的開發和共享

Reply 宣布推出 MLFRAME Reply,這是一個針對異質知識庫的新型生成人工智慧框架。 設計…

23九月2023

榮獲最具創新性新創公司:10 年義大利創業大師獎 (IMSA) 的 2023 家決賽入圍者

IMSA 獎頒發​​給來自大學研究的年輕新創公司...

22九月2023

扎耶德永續發展獎論壇上的思想領袖強調了推動人類和地球進步的方法

扎耶德永續發展獎是阿聯酋針對永續發展和人道主義承諾的全球獎項。...

22九月2023

Reply 在創新、業務影響和客戶成功類別中獲得 4 項 Oracle EMEA Cluster 合作夥伴獎

全球顧問和系統整合商兼 Oracle 雲端託管服務供應商 Reply 宣布已收到…

19九月2023

歐洲最大的區塊鏈和 WEB 3.0 大師 MasterZ 推出致力於學習、實踐和工作的新平台

MasterZ 區塊鏈增加了歐洲最大的 WEB 3.0 卓越碩士的價值。 全義大利隊...

19九月2023

扎耶德可持續發展獎公佈 33 名決賽入圍者,推動全球可持續發展倡議

從 33 個國家的 5.213 份申請中選出 163 名決賽入圍者 決賽入圍者倡導有影響力的氣候行動並支持獲得清潔能源……

18九月2023

生物研究的新興趨勢和創新:從實驗室到臨床

生物製劑已成為一種創新的藥物類別,通過靶向治療徹底改變了醫學領域。 到…

17九月2023

3D Systems 通過內包額外構建平台的生產來簡化製造並推動持續創新

在法國里永和卡羅來納州羅克希爾的工廠內採購用於生產金屬和聚合物的打印機……

17九月2023

Biognosys 在 2023 年 HUPO 世界大會上展示了使蛋白質組可用於生命科學研究的技術創新和科學進步

使用 Spectronaut ® 18 進行無庫、機器學習驅動的數據分析可提供行業領先的蛋白質定量和通量……

16九月2023

Mattermost 推出新的合作夥伴關係,以推動公共部門更大的創新和採用

Mattermost 擁有一個擴大的盟友生態系統,重點是新的國防部用例解決方案……

16九月2023