CSRF là gì ? Cách kiểm tra và bảo mật hiệu quả

CSRF (Cross-Site Request Forgery) là một lỗ hổng bảo mật web xảy ra khi kẻ tấn công lợi dụng quyền xác thực của người dùng trên một website để thực hiện các hành động trái phép mà người dùng không hề hay biết. Kẻ tấn công sẽ gửi một yêu cầu độc hại từ một trang khác, sử dụng các thông tin xác thực hiện có của người dùng (cookie, token xác thực, v.v.) mà người dùng đã đăng nhập trên trang web mục tiêu.

Cách thức hoạt động của CSRF

  • Kẻ tấn công tạo một trang web độc hại: Trang web này chứa mã JavaScript sẽ gửi yêu cầu đến trang web mà người dùng đã đăng nhập.
  • Kẻ tấn công dụ dỗ người dùng truy cập trang web độc hại: Kẻ tấn công có thể sử dụng nhiều cách để dụ dỗ người dùng truy cập trang web độc hại, chẳng hạn như gửi email giả mạo, tin nhắn SMS hoặc đăng tải nội dung hấp dẫn trên mạng xã hội.
  • Mã Javascript trên trang web độc hại được thực thi: Khi người dùng truy cập trang web độc hại, mã Javascript sẽ được thực thi trong trình duyệt của người dùng.
  • Mã Javascript gửi yêu cầu đến trang web mà người dùng đã đăng nhập: Mã JavaScript sẽ gửi một yêu cầu đến trang web mà người dùng đã đăng nhập, yêu cầu thực hiện một hành động nào đó.
  • Yêu cầu được thực hiện thành công: Do trình duyệt đã lưu trữ cookie xác thực của người dùng, yêu cầu này sẽ được thực hiện thành công mà không cần sự đồng ý của người dùng.
CSRF hoạt động như thế nào

Để hiểu rõ hơn cách thức hoạt động của CSRF, có thể sử dụng một ví dụ cụ thể: 

Người dùng đăng nhập vào tài khoản ngân hàng của mình và giữ phiên đăng nhập đó bằng cookies/session token. Sau đó, người dùng vô tình truy cập vào một trang web độc hại do kẻ tấn công tạo ra, trang web này chứa mã Javascript ẩn. 

Khi người dùng truy cập vào trang web độc hại, mã Javascript sẽ tự động gửi một yêu cầu tới tài khoản ngân hàng kèm cookie/session token của người dùng mà không cần sự chấp thuận của người dùng. Khi yêu cầu này được thực hiện, kẻ tấn công có thể thực hiện các hành động như chuyển tiền hoặc thực hiện các giao dịch tài chính khác từ tài khoản của người dùng.

Cách kiểm tra CSRF

Để kiểm tra lỗ hổng CSRF, bạn có thể sử dụng các công cụ kiểm tra bảo mật như:

  • OWASP ZAP: Công cụ này có khả năng tự động phát hiện các lỗ hổng, bao gồm CSRF.
  • Burp Suite: Hỗ trợ kiểm tra các yêu cầu, form, và phân tích xem trang web có thực hiện bảo vệ CSRF hay không.
  • Manually Testing: Bạn có thể tạo một trang độc hại thử gửi yêu cầu giả mạo đến website mục tiêu khi người dùng đã đăng nhập và xem phản hồi.

Cách bảo mật chống lại CSRF hiệu quả

  1. Sử dụng CSRF Token:
    • Mỗi yêu cầu từ phía client phải đi kèm với một token duy nhất, được sinh ra trên server và gắn vào form hoặc trong header của yêu cầu.
    • Token này không dễ đoán và được kiểm tra trên server khi có yêu cầu đến.
    • Ví dụ: Laravel và nhiều framework khác đã tích hợp sẵn cơ chế bảo vệ CSRF token trong form.
  2. Kiểm tra nguồn gốc yêu cầu (Origin và Referer Headers):
    • Kiểm tra giá trị của header Origin hoặc Referer trong các yêu cầu POST. Nếu header không khớp với domain hợp lệ của bạn, từ chối yêu cầu đó.
  3. Sử dụng phương pháp xác thực bổ sung:
    • Đối với các hành động quan trọng (ví dụ chuyển tiền), yêu cầu người dùng nhập lại mật khẩu hoặc sử dụng phương pháp xác thực hai yếu tố (2FA).
  4. Thiết lập SameSite Cookie:
    • Cấu hình cookie với thuộc tính SameSite=Lax hoặc SameSite=Strict để ngăn chặn các trình duyệt gửi cookie trong các yêu cầu xuất phát từ một trang khác.
  5. Giới hạn phương thức HTTP cho các yêu cầu thay đổi dữ liệu:
    • Hạn chế các yêu cầu thay đổi dữ liệu chỉ sử dụng các phương thức POST, PUT, DELETE, v.v., và không cho phép thực hiện qua GET vì GET thường không được coi là nguy hiểm.
  6. Cẩn thận đề phòng lỗi XSS: Với XSS, hacker có thể cài mã độc trên chính trang web cần tấn công. Lúc này, mọi phương pháp phòng chống CSRF như token, referrer đều bị vô hiệu hoá.
  7. Ngoài ra, là một user, bạn cần biết tự bảo vệ mình theo nhiều cách sau:
    • Đăng xuất khỏi account sau khi sử dụng để tránh lưu cookie.
    • Không nhấn vào quảng cáo hay các nút mà ta cho là không an toán.
    • Không ghé thăm các trang bậy bạ, nguy hiểm. Nhiều khi ta không bấm nút gì, chỉ cần truy cập trang, trình duyệt cũng tự động post dựa trên javascript hoặc thẻ img.

Xem thêm: XSS là gì ? Cách kiểm tra và ngăn chặn XSS hiệu quả

Kết luận

Trên đây là tổng quan thông tin giải đáp cho chủ đề CSRF là gì. Thực tế, CSRF là mối đe dọa nghiêm trọng đối với an ninh website, đòi hỏi người dùng cần áp dụng các biện pháp phòng chống chủ động. Việc triển khai đồng thời các giải pháp được đề cập trong bài viết này sẽ giúp người dùng có thể giảm thiểu tối đa rủi ro liên quan, bảo vệ website của mình khỏi những cuộc tấn công CSRF nguy hiểm.

Trong bài viết chỉ là ví dụ, theo nguyên tắc thì request GET chỉ được dùng để truy cập dữ liệu, không được dùng để thực hiện các hoạt động thay đổi dữ liệu như edit/delete. Các ngân hàng thường bảo mật rất kĩ bằng cách set cookie có thời gian sống khá ngắn, không cho phép chuyển tiền mà không có code OTP v…v.

5/5 – (172 votes)

Bài viết khác