CSRF và CSRF Protection trong Laravel
Trong blog này, chúng ta sẽ có cái nhìn rõ ràng hơn về tấn công CSRF, CSRF Protection trong Laravel và so sánh sự khác nhau giữa CSRF filter trong Laravel và VerifyCsrfToken middleware trong Laravel 5. I. Tổng quan về CSRF CSRF là gì? CRSF (Cross Site Request Forgery) còn được gọi là ...
Trong blog này, chúng ta sẽ có cái nhìn rõ ràng hơn về tấn công CSRF, CSRF Protection trong Laravel và so sánh sự khác nhau giữa CSRF filter trong Laravel và VerifyCsrfToken middleware trong Laravel 5.
I. Tổng quan về CSRF
- CSRF là gì?
CRSF (Cross Site Request Forgery) còn được gọi là "Session riding", "XSRF" là kĩ thuật tấn công bằng cách sử dụng quyền chứng thực của người sử dụng đối với một website khác (tấn công giả mạo). Các ứng dụng web hoạt động theo cơ chế nhận các câu lệnh HTTP từ người sử dụng, sau đó thực thi các câu lệnh này.
Hacker sử dụng phương pháp CSRF để lừa trình duyệt của người dùng gửi đi các câu lệnh HTTP đến các ứng dụng website. Trong trường hợp phiên làm việc của người dùng chưa hết hiệu lực thì các câu lệnh trên sẽ được thực hiện với quyền chứng thực của người dùng.
Tôi sẽ lấy 1 ví dụ về csrf cho các bạn dễ hình dung: Gỉa sử hệ thống của bạn có 1 action xóa bài viết theo url sau youwebsite.com/admin/post/{id}/delete. Như vậy nếu có một người nào biết được URL này thì họ sẽ hack được, và họ sẽ lợi dụng chính admin của hệ thống. Họ có thể gửi cho bạn một email với nội dung là một hay nhiều thẻ img với src chính là url đó và mỗi hình có 1 id khác nhau, như vậy nếu admin đọc cái mail đó và đang login vào hệ thống thì admin đã vô tình xóa đi các post với id như trong các src của thẻ img trên.
- Cách phòng chống
Để ngăn chặn CSRF, có hai cách thường được sử dụng:
- Sử dụng token: Phương pháp thứ nhất là chèn thêm token vào đường link thực hiện thao tác. Giá trị của token phải mạnh, khó đoán, thường là hash của session ID của user kết hợp với password, IP của user, thời điểm đăng nhập,...Giá trị của biến token được sinh ra ngẫu nhiên hoặc tùy theo thuật toán của developer. Mục đích của token là làm cho hacker không thể xác định được chính xác đường link thực hiện thao tác. Như trong ví dụ trên URL sau khi thêm token: youwebsite.com/admin/post/{id}/delete?_token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn
- Chèn thêm xác nhận trung gian trước những thao tác nhạy cảm: Có thể yêu cầu user nhập lại password để xác thực thao tác hoặc yêu cầu nhập captcha. Các dich vụ thanh toán (ngân hàng, chứng khoán) thường yêu cầu user sử dụng thêm OTP(One-time password) hoặc chứng thư số để xác nhận lại các giao dịch.
II. CSRF Protection trong Laravel
Laravel có cơ chế bảo vệ khỏi csrf được kích hoạt mặc định. Vì vậy ngay cả khi bạn không biết gì csrf, tại sao cần bảo vệ các ứng dụng khỏi nó bạn vẫn có thể sử dụng nó khá đơn giản