Laravel là một framework mạnh mẽ, điều này đồng nghĩa với việc nó cung cấp nhiều cơ chế bảo mật mạnh mẽ cho ứng dụng web của bạn. Một trong những cơ chế đó là CSRF (Cross-Site Request Forgery). CSRF là một kỹ thuật tấn công thường xuyên xảy ra trên web, và Laravel đã tích hợp một cách mạnh mẽ để ngăn chặn nó.
Khi bạn tạo một biểu mẫu trong Laravel và gửi nó đi, bạn có thể gặp phải lỗi “419 Page Expired”. Nguyên nhân của lỗi này là bạn chưa bao gồm token CSRF trong biểu mẫu Laravel. Token CSRF là một dãy ký tự ngẫu nhiên, được sinh ra để đảm bảo tính toàn vẹn và bảo mật của các yêu cầu POST và PUT trong Laravel.
Để khắc phục lỗi “419 Page Expired”, bạn chỉ cần bao gồm token CSRF trong biểu mẫu của mình. Laravel sẽ tạo ra và quản lý token này tự động cho bạn, vì vậy bạn chỉ cần đảm bảo rằng bạn đã bao gồm mã token này trong biểu mẫu của mình.
CSRF là gì?
CSRF là viết tắt của “Cross-Site Request Forgery,” đây là một kỹ thuật tấn công mạo danh. CSRF liên quan đến việc tấn công trên web bằng cách sử dụng Cookies. Hacker sẽ tạo các yêu cầu giả mạo, giả vờ như là người dùng thực sự, để đánh lừa các trang web. Mục tiêu là thu thập thông tin riêng tư của người dùng.
Sử dụng CSRF trong Laravel Form
Để tránh lỗi 419 Page Expired và tăng cường bảo mật cho form trên Laravel bạn cần thêm token vào như sau:
<form method="POST" action="https://vinasupport.com/profile"> @csrf ... </form>
Hoặc
<form method="POST" action="https://vinasupport.com/profile"> ... <input type="hidden" name="_token" value="{{ csrf_token() }}" /> ... </form>
Bạn có thể lấy token ở trong Laravel Session
use IlluminateHttpRequest; Route::get('/token', function (Request $request) { $token = $request->session()->token(); $token = csrf_token(); // ... });
Sử dụng CSRF trong Jquery / Javascript
Đê sử dụng CSRF trên request được tạo bằng JS, chúng ta sử dụng header là: X-CSRF-TOKEN
Bạn có thể thêm chúng ở file Meta
<meta name="csrf-token" content="{{ csrf_token() }}">
Hoặc đặt trong code js như sau:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
Vậy là bạn đã tạo một tầng bảo vệ bổ sung cho trang web của bạn.