Rumah >pembangunan bahagian belakang >tutorial php >Perisian tengah Laravel: digunakan untuk menghalang serangan pemalsuan permintaan merentas tapak (CSRF).

Perisian tengah Laravel: digunakan untuk menghalang serangan pemalsuan permintaan merentas tapak (CSRF).

WBOY
WBOYasal
2023-07-30 16:27:29835semak imbas

Laravel middleware: digunakan untuk menghalang serangan pemalsuan permintaan merentas tapak (CSRF)

Gambaran keseluruhan:
Dalam aplikasi Internet, serangan pemalsuan permintaan merentas tapak (CSRF) ialah ancaman keselamatan rangkaian biasa. Serangan CSRF memalsukan permintaan berniat jahat untuk membenarkan pengguna melakukan operasi haram tanpa pengetahuan mereka, seperti menukar kata laluan, memindahkan dana, dsb. Untuk mengelakkan serangan seperti ini, Laravel menyediakan perisian tengah terbina dalam yang boleh melindungi aplikasi daripada serangan CSRF dengan mudah.

Penggunaan middleware CSRF:
Dalam Laravel, menggunakan middleware CSRF adalah sangat mudah. Pertama, kita perlu mendaftarkan middleware dalam fail penghalaan aplikasi. Buka fail app/Http/Kernel.php, cari kumpulan middleware web dan tambahkan middleware VerifyCsrfToken di dalamnya, seperti yang ditunjukkan di bawah: 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表单中,我们可以通过在ff9c23ada1bcecdd1a0fb5d5a0f18437标签中添加一个隐藏的输入域,并将该输入域的值设置为CSRF token,来保护该表单免受CSRF攻击。

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

在上面的示例中,我们使用了@csrf指令来生成隐藏的CSRF token输入域。该指令会自动在生成的HTML中插入一个隐藏的d5fd7aea971a85678ba271703566ebfd标签,其名称为_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 rrreee

Apabila middleware didaftarkan, Laravel secara automatik akan menjana token untuk setiap permintaan dan menyimpannya dalam sesi. Setiap kali permintaan POST, PUT atau DELETE dihantar, Laravel akan membandingkan token dalam permintaan dan token yang disimpan dalam sesi untuk melihat sama ada ia konsisten Jika ia tidak konsisten, permintaan akan ditolak dan ralat akan berlaku dikembalikan.


Jana token CSRF:

Laravel menyediakan fungsi pembantu csrf_token global untuk menjana token CSRF dalam paparan. Dalam borang HTML, kami boleh melindungi borang daripada serangan CSRF dengan menambahkan medan input tersembunyi dalam teg ff9c23ada1bcecdd1a0fb5d5a0f18437 dan menetapkan nilai medan input kepada token CSRF. 🎜rrreee🎜Dalam contoh di atas, kami menggunakan arahan @csrf untuk menjana medan input token CSRF tersembunyi. Perintah ini secara automatik akan memasukkan teg d5fd7aea971a85678ba271703566ebfd tersembunyi ke dalam HTML yang dijana, dengan nama _token dan nilainya ialah token CSRF. 🎜🎜Jika anda menggunakan fungsi pembantu borang terbina dalam Laravel (seperti Form::open), anda tidak perlu menambah medan input token CSRF secara manual, Laravel akan menjananya secara automatik untuk anda. 🎜🎜Sahkan token CSRF secara manual: 🎜Selain pengesahan automatik, Laravel juga menyediakan kaedah untuk mengesahkan token CSRF secara manual, supaya kami boleh melengkapkan pengesahan yang lebih terperinci dalam pengawal atau penghalaan panggil balik. Kami boleh menggunakan fungsi pembantu csrf_token untuk mendapatkan token CSRF permintaan semasa dan mendapatkan kaedah session yang disimpan dalam sesi dengan memanggil Request objek. 🎜🎜Berikut ialah contoh mengesahkan token CSRF secara manual dalam pengawal: 🎜rrreee🎜Dalam contoh di atas, kami menggunakan fungsi hash_equals untuk membandingkan sama ada token dalam permintaan itu konsisten dengan token dalam sesi , memastikan keselamatan pengesahan token CSRF. 🎜🎜Ringkasan: 🎜Perisian tengah CSRF Laravel menyediakan cara yang mudah namun berkuasa untuk menghalang serangan pemalsuan permintaan merentas tapak. Dengan menjana dan mengesahkan token CSRF secara automatik, kami boleh melindungi aplikasi kami dengan berkesan daripada permintaan berniat jahat. Sama ada pengesahan automatik atau pengesahan manual, Laravel memberikan kami pilihan yang fleksibel dan boleh dipercayai untuk menjamin aplikasi kami. 🎜

Atas ialah kandungan terperinci Perisian tengah Laravel: digunakan untuk menghalang serangan pemalsuan permintaan merentas tapak (CSRF).. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn