Laravel - Bảo vệ CSRF
Xin chào các nhà phát triển đang nở rộ! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới bảo vệ CSRF trong Laravel. Đừng lo lắng nếu bạn mới bắt đầu lập trình; tôi sẽ hướng dẫn bạn từng bước, giống như tôi đã làm với hàng trăm học sinh trong những năm dạy học của mình. Hãy cùng bắt đầu hành trình thú vị này!
CSRF là gì?
Trước khi chúng ta nhảy vào việc triển khai của Laravel, hãy hiểu CSRF là gì. CSRF viết tắt của Cross-Site Request Forgery. Hãy tưởng tượng bạn đang ngồi trong một quán cà phê, thưởng thức cốc latte và kiểm tra tài khoản ngân hàng trên laptop của bạn. Đột nhiên, một hacker tinh ranh ngồi gần đó lừa trình duyệt của bạn gửi yêu cầu chuyển tiền từ tài khoản của bạn sang tài khoản của họ. Đó chính là CSRF!
Tại sao bảo vệ CSRF lại quan trọng?
Các cuộc tấn công CSRF có thể rất nghiêm trọng. Chúng có thể dẫn đến việc thực hiện các hành động không được ủy quyền thay mặt cho người dùng đã xác thực. Trong kịch bản quán cà phê, bạn có thể mất tiền kiếm được khó khăn của mình! Đó là lý do chúng ta cần bảo vệ CSRF, và Laravel đã có sẵn sàng hỗ trợ chúng ta.
Triển khai bảo vệ CSRF trong Laravel
Laravel làm cho việc bảo vệ ứng dụng của bạn khỏi các cuộc tấn công CSRF trở nên vô cùng dễ dàng. Hãy cùng xem nó hoạt động như thế nào.
Token CSRF
Tại trung tâm của bảo vệ CSRF trong Laravel là một token duy nhất. Hãy tưởng tượng token này như một cái bắt tay bí mật giữa ứng dụng của bạn và trình duyệt của người dùng.
Dưới đây là cách bạn bao gồm token này trong các form của mình:
<form method="POST" action="/profile">
@csrf
...
</form>
Lệnh @csrf
tạo ra một trường input ẩn với token CSRF. Nó giống như cấp cho form của bạn một mật khẩu bí mật!
Middleware xác minh CSRF
Laravel sử dụng middleware để xác minh token CSRF cho mọi yêu cầu POST, PUT, PATCH, hoặc DELETE. Nó giống như việc có một bảo vệ kiểm tra thẻ tại lối vào của một câu lạc bộ.
Dưới đây là middleware trông như thế nào phía sau hậu trường:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
Middleware này tự động được áp dụng cho tất cả các route web. Nó giống như việc có một lá chắn vô hình bảo vệ ứng dụng của bạn!
Loại trừ URL khỏi bảo vệ CSRF
Đôi khi, bạn có thể muốn để một số URL bỏ qua bảo vệ CSRF. Ví dụ, nếu bạn đang xây dựng một API mà các ứng dụng khác sẽ sử dụng. Bạn có thể loại trừ các URL này bằng cách thêm chúng vào mảng $except
trong middleware VerifyCsrfToken
:
protected $except = [
'api/*',
'webhook/*',
];
Nó giống như việc cấp cho một số VIP bypass qua kiểm tra an ninh tại lối vào của câu lạc bộ.
X-CSRF-TOKEN
Đối với các yêu cầu AJAX, Laravel cho phép bạn gửi token CSRF trong một tiêu đề HTTP tùy chỉnh叫做 X-CSRF-TOKEN
. Dưới đây là cách bạn có thể thiết lập nó:
<meta name="csrf-token" content="{{ csrf_token() }}">
Sau đó, trong JavaScript (sử dụng jQuery làm ví dụ):
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Nó giống như việc cấp cho các yêu cầu AJAX của bạn một huy hiệu đặc biệt nói rằng, "Tôi được ủy quyền!"
X-XSRF-TOKEN
Laravel cũng đặt một token CSRF trong một cookie tên là XSRF-TOKEN
. Nhiều khung công tác JavaScript, như Angular, tự động sử dụng cookie này.
Nếu bạn không sử dụng các khung công tác này, bạn có thể gửi token thủ công:
var token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
Nó giống như việc cấp cho ứng dụng của bạn một vòng解码 để xác minh yêu cầu!
Các phương pháp bảo vệ CSRF
Dưới đây là bảng tóm tắt các phương pháp bảo vệ CSRF mà chúng ta đã thảo luận:
Phương pháp | Mô tả |
---|---|
Lệnh @csrf | Tạo ra một trường input ẩn với token CSRF |
Middleware VerifyCsrfToken | Tự động xác minh token CSRF cho POST, PUT, PATCH, DELETE requests |
Tiêu đề X-CSRF-TOKEN | Cho phép gửi token CSRF trong tiêu đề HTTP tùy chỉnh cho AJAX requests |
Cookie XSRF-TOKEN | Đặt token CSRF trong cookie để sử dụng bởi các khung công tác JavaScript |
Kết luận
Và thế là bạn đã có nó, những nhà mã hóa tương lai! Chúng ta đã cùng nhau hành trình qua thế giới bảo vệ CSRF trong Laravel. Nhớ rằng, việc bảo vệ ứng dụng của bạn là rất quan trọng, và Laravel làm cho nó dễ dàng hơn bao giờ hết.
Như tôi luôn nói với học sinh của mình, hãy tưởng tượng CSRF protection như một bảo vệ tại câu lạc bộ hot nhất trong thành phố. Nó đảm bảo rằng chỉ có các yêu cầu được ủy quyền mới có thể đi qua, giữ cho ứng dụng của bạn an toàn khỏi những kẻ xấu.
Tiếp tục thực hành, giữ vững sự tò mò, và trước khi bạn biết, bạn sẽ trở thành một chuyên gia xây dựng ứng dụng Laravel an toàn! Chúc các bạn viết mã vui vẻ!
Credits: Image by storyset