首頁 > 後端開發 > php教程 > Laravel中間件:用於防止跨站點請求偽造(CSRF)攻擊

Laravel中間件:用於防止跨站點請求偽造(CSRF)攻擊

WBOY
發布: 2023-07-30 16:28:01
原創
858 人瀏覽過

Laravel中間件:用於防止跨站點請求偽造(CSRF)攻擊

概述:
在互聯網應用中,跨站點請求偽造(CSRF)攻擊是常見的網路安全威脅。 CSRF攻擊透過偽造惡意請求,讓使用者在不知情的情況下執行非法操作,例如修改密碼、轉帳等。為了防止這種攻擊,Laravel提供了一個內建的中間件,可以輕鬆保護應用程式免受CSRF攻擊。

CSRF中間件的使用:
在Laravel中,使用CSRF中介軟體非常簡單。首先,我們需要在應用程式的路由檔案中註冊該中間件。打開app/Http/Kernel.php文件,找到web中間件組,並在其中添加VerifyCsrfToken中間件,如下所示:

protected $middlewareGroups = [
    'web' => [
        // 其他中间件...
        AppHttpMiddlewareVerifyCsrfToken::class,
    ],
    // 其他中间件组...
];
登入後複製

當註冊了該中間件後,Laravel會自動為每個請求產生一個token,並將其儲存在session中。每次發送POST、PUT、DELETE請求時,Laravel會比對請求中的token和儲存在session中的token是否一致,如果不一致,則會拒絕請求並傳回錯誤。

產生CSRF token:
Laravel提供了一個全域的csrf_token輔助函數,用於在視圖中產生一個CSRF token。在HTML表單中,我們可以透過在<form>標籤中新增一個隱藏的輸入域,並將該輸入域的值設為CSRF token,來保護該表單免受CSRF攻擊。

<form method="POST" action="/submit">
    @csrf
    <!-- 其他表单字段... -->
    <button type="submit">提交</button>
</form>
登入後複製

在上面的範例中,我們使用了@csrf指令來產生隱藏的CSRF token輸入域。此指令會自動在產生的HTML中插入一個隱藏的<input>標籤,其名稱為_token,值為CSRF token。

如果你使用Laravel內建的表單輔助函數(如Form::open),則不需要手動新增CSRF token輸入域,Laravel會自動為你產生。

手動驗證CSRF token:
除了自動驗證之外,Laravel也提供了手動驗證CSRF token的方法,以便我們在控制器或路由回調中完成更細粒度的驗證。我們可以使用csrf_token輔助函數來取得目前請求的CSRF token,並透過呼叫Request物件的session方法來取得儲存在session中的token。

下面是一個在控制器中手動驗證CSRF token的範例:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesSession;

class UserController extends Controller
{
    public function updateProfile(Request $request)
    {
        $token = $request->input('_token');
        if (!hash_equals(Session::token(), $token)) {
            // CSRF token验证失败
            abort(403, 'Unauthorized action.');
        }

        // CSRF token验证通过,继续处理操作
        // ...
    }
}
登入後複製

在上述範例中,我們使用了hash_equals函數來比對請求中的token和session中的token是否一致,確保CSRF token驗證的安全性。

總結:
Laravel的CSRF中間件提供了一種簡單而強大的方式來防止跨站點請求偽造攻擊。透過自動產生和驗證CSRF token,我們可以有效地保護我們的應用程式免受惡意請求的威脅。無論是自動驗證還是手動驗證,Laravel都為我們提供了靈活和可靠的選擇來保護我們的應用安全。

以上是Laravel中間件:用於防止跨站點請求偽造(CSRF)攻擊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板