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表单中,我们可以通过在<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
rrreee
Jana token CSRF:
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 <form>
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 <input>
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!