1. CSRF là gì?
CSRF (Cross-Site Request Forgery) là một kiểu tấn công an ninh web trong đó kẻ tấn công lợi dụng quyền hạn của người dùng đối với một trang web đã đăng nhập sẵn. Mục đích là thực hiện các hành động mà người dùng không hề hay biết.
Ví dụ: Một trang web ngân hàng trực tuyến cho phép người dùng thực hiện giao dịch bằng cách gửi yêu cầu POST đến server. Nếu một kẻ tấn công có thể lừa nạn nhân nhấp vào một liên kết độc hại hoặc tải một trang có mã JavaScript độc hại, nó có thể kích hoạt một yêu cầu hợp lệ đến máy chủ của ngân hàng mà không cần sự đồng ý của nạn nhân.
2. Cách CSRF hoạt động
CSRF khai thác niềm tin giữa người dùng và trang web. Quá trình tấn công diễn ra theo các bước sau:
- Nạn nhân đăng nhập vào trang web hợp lệ (ví dụ: tài khoản ngân hàng, mạng xã hội, hệ thống quản trị...)
- Kẻ tấn công tạo ra một yêu cầu giả mạo có thể thực hiện một hành động trái phép (chuyển tiền, thay đổi email, đổi mật khẩu...)
- Nạn nhân vô tình kích hoạt yêu cầu đó bằng cách nhấp vào một liên kết hoặc tải một trang web chứa mã độc
- Trang web hợp lệ xử lý yêu cầu mà không xác minh xem đó có phải là yêu cầu hợp lệ từ người dùng hay không, do đó thực hiện hành động trái phép.
3. Cách phòng chống tấn công CSRF hiệu quả
a) Phía nhà phát triển
Sử dụng CSRF Token
Một trong những cách hiệu quả nhất để ngăn chặn CSRF là sử dụng CSRF Token. Đây là một mã bí mật duy nhất được gán cho mỗi yêu cầu hợp lệ của người dùng.
- Khi người dùng gửi yêu cầu, token này được gửi kèm theo.
- Server kiểm tra token trước khi xử lý yêu cầu.
- Nếu token không hợp lệ hoặc không tồn tại, yêu cầu bị từ chối.
Kiểm tra Header "Origin" hoặc "Referer"
Web server có thể kiểm tra giá trị của các HTTP header như Origin hoặc Referer để đảm bảo yêu cầu đến từ nguồn hợp lệ. Nếu yêu cầu không đến từ domain hợp lệ, nó sẽ bị từ chối.
Sử dụng SameSite Cookie
Thuộc tính SameSite trong cookie có thể giúp giảm nguy cơ tấn công CSRF bằng cách chỉ cho phép cookie được gửi kèm theo các yêu cầu xuất phát từ chính domain của trang web. Các giá trị có thể sử dụng:
- Strict: Chỉ gửi cookie khi người dùng truy cập từ chính trang web.
- Lax: Cho phép gửi cookie với một số yêu cầu GET nhất định.
Xác thực hai yếu tố (2FA)
Việc yêu cầu xác thực hai yếu tố đối với các hành động quan trọng (chẳng hạn như chuyển tiền, thay đổi mật khẩu) có thể giúp ngăn chặn các cuộc tấn công CSRF ngay cả khi yêu cầu giả mạo được gửi đi.
Giới hạn phương thức HTTP
Các yêu cầu GET không nên được sử dụng để thực hiện các hành động có thể thay đổi dữ liệu. Chỉ các phương thức POST, PUT hoặc DELETE mới nên được dùng để thay đổi trạng thái dữ liệu.
Sử dụng CAPTCHA
CAPTCHA có thể giúp ngăn chặn các yêu cầu tự động và giảm nguy cơ CSRF bằng cách yêu cầu người dùng xác minh trước khi thực hiện hành động quan trọng.
b) Phía người dùng
Không nhấp vào các liên kết đáng ngờ
Người dùng nên tránh nhấp vào các liên kết không rõ nguồn gốc, đặc biệt là trong email, tin nhắn hoặc các trang web lạ.
Đăng xuất khỏi tài khoản khi không sử dụng
Khi không còn sử dụng các trang web quan trọng như ngân hàng hoặc quản trị hệ thống, người dùng nên đăng xuất để giảm nguy cơ bị tấn công.
Sử dụng trình duyệt hiện đại và cập nhật
Các trình duyệt hiện đại có tích hợp nhiều cơ chế bảo vệ chống lại các cuộc tấn công CSRF. Người dùng nên đảm bảo cập nhật trình duyệt thường xuyên để bảo vệ tối đa.
Không lưu mật khẩu trên các thiết bị công cộng
Nếu sử dụng máy tính công cộng hoặc thiết bị không an toàn, người dùng không nên lưu mật khẩu hoặc cho phép tự động đăng nhập.
Kích hoạt xác thực hai yếu tố (2FA)
Xác thực hai yếu tố giúp tăng cường bảo mật, giảm nguy cơ bị kẻ tấn công lợi dụng để thực hiện các hành động giả mạo.
Kiểm tra URL trước khi thực hiện hành động quan trọng
Người dùng nên kiểm tra kỹ URL của trang web trước khi thực hiện các thao tác quan trọng như nhập mật khẩu hoặc chuyển tiền.
4. Kết luận
CSRF là một lỗ hổng bảo mật nghiêm trọng có thể dẫn đến hậu quả nghiêm trọng như mất tài khoản, mất tiền hoặc thậm chí bị kiểm soát hoàn toàn tài khoản. Tuy nhiên, với các biện pháp phòng chống như sử dụng CSRF Token, kiểm tra HTTP headers, SameSite cookie và xác thực hai yếu tố, chúng ta có thể giảm thiểu nguy cơ bị tấn công. Cả nhà phát triển và người dùng đều cần nhận thức rõ về mối đe dọa này và áp dụng các biện pháp bảo mật thích hợp để bảo vệ thông tin và tài sản của mình.
Bài viết này được đăng trên codetuthub.com để giúp bạn hiểu rõ hơn về CSRF và cách phòng chống hiệu quả.








