Penyelesaian: 1. Gunakan Laravel untuk menjana "Token CSRF" secara automatik untuk setiap Sesi pengguna Token ini boleh digunakan untuk mengesahkan sama ada pengguna yang log masuk dan orang yang memulakan permintaan adalah orang yang sama tidak, permintaan akan gagal; 2 , menyediakan fungsi bantuan global "csrf_token" untuk mendapatkan nilai Token, cuma tambah kod token dalam borang penyerahan paparan, sintaksnya ialah "<...value php="" echo="">".
Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 9, komputer Dell G3.
CSRF ialah singkatan Bahasa Inggeris bagi pemalsuan permintaan silang tapak
Sangat mudah untuk mengelakkan serangan CSRF dalam rangka kerja Laravel Mudah:
1. Laravel menjana Token CSRF secara automatik untuk setiap Sesi pengguna ini boleh digunakan untuk mengesahkan sama ada pengguna yang log masuk dan peminta adalah orang yang sama. (Prinsipnya adalah sama dengan kod pengesahan.)
2 Laravel menyediakan fungsi penolong global csrf_token untuk mendapatkan nilai Token, jadi anda hanya perlu menambah kod HTML berikut pada borang penyerahan paparan untuk disertakan. ia dalam Token permintaan:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
Kes: Laksanakan pengesahan mekanisme CSRF melalui kes
1 , satu dengan Paparkan borang (dapat), dan proses permintaan (siaran)
Route::get('test6','Home\TestController@test6');Route::post('test7','Home\TestController@test7');
2 Cipta kaedah yang diperlukan
public function test6(){ return view('home.test.test6'); } public function test7() { return "请求提交成功"; }
3 Cipta borang ringkas yang diperlukan
4. Kesan penyerahan (halaman ralat)
Kesimpulan: Melalui kes sebentar tadi, ia menunjukkan pengesahan csrf mekanisme dalam laravel didayakan secara lalai.
5. Selesaikan masalah pelaporan ralat (cara lulus pengesahan csrf)
Penyelesaian: bawa nilai token yang diperlukan untuk csrf, dan hantarkannya ke kaedah berikutnya dengan permintaan
<form action="/home/test/test7" method="post"> 用户名:<input type="text" name="username"><br> <input type="hidden" name="_token" value="{{csrf_token()}}"> {{csrf_field()}} <input type="submit" value="提交"></form>
Untuk kaedah csrf_token Permudah: {{csrf_field()}}
Ungkapan khusus:
Perbezaan antara keduanya:
Csrf_token hanyalah output Nilai token
Csrf_field mengeluarkan keseluruhan medan tersembunyi input
Cara memilih apabila menggunakannya kemudian: Dalam kebanyakan kes, anda boleh memilih mengikut situasi. Tetapi terdapat situasi di mana pembangun tidak mempunyai hak untuk memilih dan mesti menggunakan csrf_token Dalam kes ini, kaedah penyerahan borang tak segerak digunakan.
Bukan semua permintaan perlu mengelakkan serangan CSRF, seperti permintaan kepada API pihak ketiga untuk mendapatkan data.
Pengecualian boleh ditetapkan dengan menambahkan URL permintaan untuk dikecualikan pada tatasusunan sifat $except dalam perisian tengah VerifyCsrfToken (app/Http/Middleware/VerifyCsrfToken.php):
dengan menulis konfigurasi:
Kaedah penulisan pengecualian Penghalaan Tunggal
'home.test.test6',
Berbilang elemen dipisahkan dengan "," dan ikut kaedah penulisan tatasusunan.
'home.test.test6','home.test.test7'
Jika anda perlu mengecualikan semua laluan dan menggunakan csrf, anda boleh menulis:
'*'
[Cadangan berkaitan: tutorial video laravel]
Atas ialah kandungan terperinci Penyelesaian kepada serangan csrf dalam laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!