- vừa được xem lúc

Hiểu về Tấn công CSRF: Quy trình, Rủi ro và Biện pháp Bảo vệ

0 0 4

Người đăng: Vũ Tuấn

Theo Viblo Asia

Cross-Site Request Forgery (CSRF) là một lỗ hổng bảo mật phổ biến trên web, khai thác phiên đăng nhập đã được xác thực của người dùng trên một trang web đáng tin cậy để thực hiện các hành động trái phép. Trong bài viết này, chúng ta sẽ tìm hiểu CSRF là gì, cách hoạt động, tác động tiềm ẩn và các phương pháp hiệu quả để ngăn chặn. Bài viết cũng bao gồm các sơ đồ chuỗi (sequence diagrams) minh họa bằng PlantUML để làm rõ quy trình tấn công và phòng chống.

CSRF là gì?

CSRF là một kiểu tấn công trong đó một trang web độc hại lừa trình duyệt của người dùng gửi các yêu cầu ngoài ý muốn tới một trang web hợp pháp mà người dùng đang đăng nhập. Vì trình duyệt tự động gửi cookie khi gửi yêu cầu tới trang đích, trang web hợp pháp có thể xử lý yêu cầu mà tưởng rằng nó do người dùng gửi đi.

Kết quả có thể nghiêm trọng: chuyển tiền trái phép, đổi mật khẩu, hoặc xóa dữ liệu.

Tấn công CSRF dựa trên các yếu tố:

  • Người dùng đã đăng nhập vào trang web mục tiêu (ví dụ: A.com).
  • Trang A.com tin tưởng cookie để xác thực mà không có thêm xác minh nào.
  • Kẻ tấn công tạo một yêu cầu độc hại từ một trang web khác (ví dụ: B.com) và lừa người dùng kích hoạt.

Quy trình tấn công CSRF

Dưới đây là phân tích quy trình tấn công CSRF bằng sơ đồ chuỗi, minh họa một tình huống người dùng vô tình thực hiện hành động trái phép trên trang web ngân hàng (A.com) thông qua trang độc hại (B.com). image.png

Cách tấn công hoạt động

  • Người dùng đăng nhập: Người dùng truy cập A.com (ngân hàng) và đăng nhập. Máy chủ trả về cookie phiên (session_id), được trình duyệt lưu lại.

  • Người dùng truy cập trang độc hại: Người dùng bị dẫn tới B.com (thông qua email lừa đảo hoặc liên kết độc hại). B.com chứa một biểu mẫu ẩn tự động gửi yêu cầu:

 <form action="https://A.com/transfer" method="POST"> <input type="hidden" name="amount" value="1000"> <input type="hidden" name="to" value="attacker_account"> </form> <script>document.forms[0].submit();</script>
  • Trình duyệt gửi yêu cầu: Trình duyệt gửi yêu cầu giả mạo đến A.com, tự động đính kèm cookie phiên. Do cookie hợp lệ, A.com tin rằng yêu cầu là hợp pháp.

  • Hành động được thực thi: Ngân hàng xử lý chuyển khoản, kẻ tấn công nhận được tiền.

Rủi ro của CSRF

  • Mất tiền: Chuyển khoản, thanh toán trái phép
  • Tài khoản bị xâm phạm: Đổi mật khẩu, thay đổi thiết lập
  • Dữ liệu bị thay đổi/xóa: Mất mát hoặc chỉnh sửa dữ liệu
  • Tổn hại uy tín: Mất lòng tin người dùng với hệ thống

Ngăn chặn tấn công CSRF

Để giảm thiểu rủi ro CSRF, các website cần áp dụng các biện pháp xác minh yêu cầu thực sự đến từ nguồn tin cậy. Các kỹ thuật phổ biến:

1. CSRF Token

Thêm một token độc nhất, không đoán được vào trong các biểu mẫu hoặc yêu cầu nhạy cảm:

<form action="/transfer" method="POST"> <input type="hidden" name="_csrf" value="random_token_12345"> <input type="text" name="amount" value="100"> <input type="submit" value="Chuyển khoản">
</form>

Máy chủ sẽ kiểm tra token với mỗi yêu cầu. Trang B.com không thể truy cập hay giả mạo token, nên cuộc tấn công sẽ thất bại.

2. SameSite Cookies

Thiết lập thuộc tính SameSite cho cookie để ngăn cookie được gửi trong yêu cầu từ domain khác:

Set-Cookie: session_id=xyz123; SameSite=Strict

Trong đó:

  • Strict: Chặn cookie trong tất cả yêu cầu từ trang khác
  • Lax: Cho phép cookie trong điều hướng cấp cao, nhưng chặn với yêu cầu POST từ trang khác

3. Kiểm tra Referer / Origin

Máy chủ xác minh header Referer hoặc Origin để đảm bảo yêu cầu đến từ A.com, từ chối yêu cầu từ B.com.

4. Xác thực phụ

Với các hành động nhạy cảm như chuyển tiền: yêu cầu nhập lại mật khẩu, xác nhận email hoặc CAPTCHA.

Tại sao CSRF cần được phòng ngừa?

Không có biện pháp bảo vệ thích hợp, các lỗ hổng CSRF có thể gây hậu quả nghiêm trọng, nhất là với các hệ thống chứa dữ liệu nhạy cảm như:

  • Ngân hàng, ví điện tử
  • Nền tảng thương mại điện tử
  • Mạng xã hội

Các framework hiện đại như Django, Spring, Laravel đều đã tích hợp cơ chế chống CSRF, nhưng lập trình viên phải đảm bảo cấu hình đúng cách.

Best practice dành cho Lập trình viên

✅ Luôn sử dụng CSRF token: Thêm vào tất cả form và yêu cầu AJAX có thể thay đổi trạng thái.

✅ Sử dụng cookie SameSite: SameSite=Strict hoặc Lax cho cookie phiên.

✅ Tránh dùng GET cho hành động nhạy cảm: Dùng POST thay vì GET cho việc chuyển tiền, cập nhật dữ liệu,... để giảm rủi ro từ các thẻ <img> hoặc liên kết.

✅ Kiểm tra định kỳ: Dùng công cụ như OWASP ZAP hoặc Burp Suite để phát hiện lỗ hổng CSRF.

✅ Giáo dục người dùng: Cảnh báo về email lừa đảo, liên kết giả, vì CSRF thường dựa vào kỹ thuật lừa đảo (social engineering).

Kết luận

Tấn công CSRF lợi dụng mối quan hệ tin tưởng giữa trình duyệt của người dùng và trang web hợp pháp. Tuy nhiên, với các biện pháp như CSRF token, SameSite cookie, xác minh nguồn yêu cầu, bạn có thể giảm thiểu đáng kể rủi ro.

Các sơ đồ chuỗi minh họa quy trình tấn công và phòng vệ đã cho thấy việc xác minh ngoài cookie là vô cùng quan trọng. Hãy triển khai các lớp bảo vệ mạnh mẽ và chủ động phòng ngừa để bảo vệ người dùng và uy tín sản phẩm của bạn.

Nếu bạn có thắc mắc hoặc muốn tìm hiểu sâu hơn, hãy để lại bình luận hoặc liên hệ. Hãy bảo mật ngay từ hôm nay!

Bình luận

Bài viết tương tự

- vừa được xem lúc

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 47

- vừa được xem lúc

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 207

- vừa được xem lúc

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 45

- vừa được xem lúc

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 47

- vừa được xem lúc

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 55

- vừa được xem lúc

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 58