Laravel - Bảo vệ CSRF
CSRF đề cập đến các cuộc tấn công Cross Site Forgery trên các ứng dụng web. Các cuộc tấn công CSRF là các hoạt động trái phép mà người dùng đã xác thực của hệ thống thực hiện. Do đó, nhiều ứng dụng web dễ bị tấn công.
Laravel cung cấp bảo vệ CSRF theo cách sau:
Laravel bao gồm một trình cắm thêm CSRF được tích hợp sẵn, tạo mã thông báo cho mỗi phiên người dùng hoạt động. Các mã thông báo này xác minh rằng các hoạt động hoặc yêu cầu được gửi bởi người dùng được xác thực có liên quan.
Thực hiện
Việc triển khai bảo vệ CSRF trong Laravel được thảo luận chi tiết trong phần này. Những điểm sau đáng chú ý trước khi tiếp tục về bảo vệ CSRF -
CSRF được triển khai trong các biểu mẫu HTML được khai báo bên trong các ứng dụng web. Bạn phải bao gồm mã thông báo CSRF đã được xác thực ẩn trong biểu mẫu để phần mềm trung gian bảo vệ CSRF của Laravel có thể xác thực yêu cầu. Cú pháp được hiển thị bên dưới -
<form method = "POST" action="/profile">
{{ csrf_field() }}
...
</form>
Bạn có thể tạo các ứng dụng được điều khiển bằng JavaScript một cách thuận tiện bằng cách sử dụng thư viện JavaScript HTTP, vì nó bao gồm mã thông báo CSRF cho mọi yêu cầu gửi đi.
Tệp cụ thể là resources/assets/js/bootstrap.js đăng ký tất cả các mã thông báo cho các ứng dụng Laravel và bao gồm meta gắn thẻ cửa hàng nào csrf-token với Axios HTTP library.
Biểu mẫu không có mã thông báo CSRF
Hãy xem xét các dòng mã sau đây. Chúng hiển thị một biểu mẫu có hai tham số làm đầu vào:email và message.
<form>
<label> Email </label>
<input type = "text" name = "email"/>
<br/>
<label> Message </label> <input type="text" name = "message"/>
<input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
Kết quả của đoạn mã trên là biểu mẫu được hiển thị bên dưới mà người dùng cuối có thể xem -
Biểu mẫu hiển thị ở trên sẽ chấp nhận bất kỳ thông tin đầu vào nào từ người dùng được ủy quyền. Điều này có thể làm cho ứng dụng web dễ bị tấn công.
Xin lưu ý rằng nút gửi bao gồm chức năng trong phần bộ điều khiển. CácpostContactchức năng được sử dụng trong bộ điều khiển cho các khung nhìn liên quan đó. Nó được hiển thị bên dưới -
public function postContact(Request $request) {
return $request-> all();
}
Lưu ý rằng biểu mẫu không bao gồm bất kỳ mã thông báo CSRF nào nên thông tin nhạy cảm được chia sẻ dưới dạng tham số đầu vào dễ bị tấn công.
Biểu mẫu với mã thông báo CSRF
Các dòng mã sau đây cho bạn thấy biểu mẫu được thiết kế lại bằng cách sử dụng mã thông báo CSRF -
<form method = ”post” >
{{ csrf_field() }}
<label> Email </label>
<input type = "text" name = "email"/>
<br/>
<label> Message </label>
<input type = "text" name = "message"/>
<input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
Đầu ra đạt được sẽ trả về JSON với một mã thông báo như dưới đây:
{
"token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
"name": "TutorialsPoint",
"email": "[email protected]"
}
Đây là mã thông báo CSRF được tạo khi nhấp vào nút gửi.