Apabila anda menggunakan rangka kerja Laravel, anda mungkin menghadapi ralat HTTP 419, yang merupakan mekanisme perlindungan CSRF (Cross-site Request Forgery) dalam rangka kerja Laravel. Artikel ini menerangkan isu yang berkaitan dengan ralat ini dan cara menyelesaikannya.
Peranan pensijilan CSRF
Sebelum memperkenalkan ralat Laravel 419, mari kita fahami dahulu peranan pensijilan CSRF. CSRF dalam aplikasi web biasanya merujuk kepada penyerang yang mengambil kesempatan daripada status log masuk mangsa untuk memulakan permintaan HTTP palsu untuk melakukan operasi berniat jahat. Contohnya, penyerang boleh menggunakan akaun mangsa untuk melakukan tindakan yang tidak dijangka pada tapak web, seperti menghantar spam, menukar kata laluan, dsb.
Tujuan pengesahan CSRF adalah untuk menghalang jenis serangan ini. Prinsipnya ialah apabila menghantar permintaan kepada pelayan, token yang disulitkan disertakan dalam permintaan. Apabila pelayan menerima permintaan, ia mengesahkan sama ada token adalah sama dengan token yang disimpan pada pelayan. Jika berbeza, pelayan akan menganggap ini sebagai permintaan palsu dan menolak permintaan itu sebagai serangan CSRF.
Dalam rangka kerja Laravel, pengesahan CSRF didayakan secara lalai. Rangka kerja meletakkan token dalam setiap bentuk dengan memasukkan medan tersembunyi yang dipanggil _token
dalam halaman web. Apabila borang diserahkan, Laravel akan mengesahkan bahawa token dalam permintaan adalah betul. Jika token tidak betul, ralat 419 akan dikembalikan.
Punca Ralat Laravel 419
Ralat Laravel 419 biasanya disebabkan oleh sebab berikut:
Apabila halaman dibuka dalam penyemak imbas untuk masa yang lama, CSRF_token yang dijana oleh Laravel tamat tempoh, menyebabkan kegagalan pengesahan. Pada ketika ini, sistem akan mengembalikan ralat 419. Selain itu, jika anda mengubah suai CSRF_token secara manual dalam borang, pengesahan akan gagal.
Jika penyemak imbas anda mempunyai kuki dilumpuhkan, pengesahan CSRF tidak akan berfungsi dengan betul, yang akan mengakibatkan ralat Laravel 419.
Dalam sesetengah kes, fail konfigurasi aplikasi Laravel mungkin salah, yang mungkin juga mengakibatkan ralat 419.
Cara menyelesaikan ralat Laravel 419
Atas sebab yang berbeza, kita boleh mengambil beberapa kaedah berbeza untuk menyelesaikan ralat Laravel 419:
Satu penyelesaian ialah menggunakan JavaScript untuk mengemas kini CSRF_token secara kerap. Tambahkan kod berikut pada halaman HTML, yang akan mengemas kini token dengan kerap.
<meta name="csrf-token" content="{{ csrf_token() }}"> <script> setInterval(function(){ var csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); document.getElementsByName("_token").forEach(function(input){ input.value = csrfToken; }); }, 300000); // 5分钟 </script>
Penyelesaian lain ialah menggunakan csrf_field
fungsi Pembantu Blade yang disediakan oleh Laravel.
<form method="POST" action="/your/url"> @csrf ... </form>
Jika kuki dilumpuhkan dalam penyemak imbas anda, pengesahan CSRF tidak akan berfungsi dengan betul. Penyelesaiannya adalah untuk mendayakan kuki dalam penyemak imbas anda. Ini biasanya dilakukan dalam tetapan penyemak imbas.
Jika terdapat ralat dalam fail konfigurasi aplikasi Laravel, ia juga akan menyebabkan pengesahan CSRF gagal. Anda boleh menyemak sama ada fail config/session.php
dalam projek anda wujud dan dikonfigurasikan dengan betul, memastikan nilai pilihan driver
ialah file
atau cookie
. Juga, semak sama ada pilihan config/app.php
wujud dalam fail key
.
Ringkasan
Ralat Laravel 419 biasanya disebabkan oleh pengesahan CSRF. Kami boleh menggunakan beberapa kaedah mudah untuk menyelesaikan masalah ini, seperti mengemas kini CSRF_token secara kerap, mendayakan kuki penyemak imbas, menyemak fail konfigurasi, dsb. Saya harap melalui pengenalan artikel ini, anda boleh lebih memahami dan menyelesaikan 419 ralat dalam Laravel. Jika anda menghadapi masalah menyelesaikan isu, sila semak dokumentasi Laravel atau ajukan soalan dalam komuniti Laravel.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat laravel 419. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!