Bạn có biết rằng chỉ với một yêu cầu giả mạo được gửi từ website khác, kẻ tấn công có thể lợi dụng phiên đăng nhập của người dùng để thực hiện các hành động ngoài ý muốn? Đây chính là cách tấn công CSRF (cross site request forgery attack) hoạt động, một trong những lỗ hổng bảo mật web phổ biến hiện nay. CSRF có thể ảnh hưởng đến nhiều chức năng quan trọng như thay đổi thông tin tài khoản, thực hiện giao dịch hoặc thao tác với dữ liệu nhạy cảm nếu website không có cơ chế bảo vệ phù hợp. Bài viết này sẽ giúp bạn hiểu rõ hơn CSRF là gì, cách thức hoạt động, cách nhận biết lỗ hổng và những giải pháp phòng chống CSRF hiệu quả cho website.

- CSRF là gì?
- Bản chất và cách thức hoạt động của cross site request forgery attack
- Một số kịch bản tấn công CSRF phổ biến trong thực tế
- Lỗ hổng CSRF nguy hiểm như thế nào?
- Cách nhận biết website có lỗ hổng CSRF
- Giải pháp phòng chống tấn công CSRF hiệu quả cho website
- 1. Triển khai Anti-CSRF Token
- 2. Cấu hình Cookie an toàn với SameSite
- 3. Sử dụng Custom HTTP Headers
- 4. Kiểm tra và xác thực Origin/ Referer
- 5. Yêu cầu xác thực bổ sung cho tác vụ nhạy cảm
- 6. Không sử dụng phương thức GET cho hành động thay đổi dữ liệu
- 7. Bảo vệ API khỏi CSRF (đặc biệt với SPA và RESTful API)
- 8. Sử dụng framework và thư viện có sẵn cơ chế chống CSRF attack
- 9. Sử dụng CAPTCHA
- 10. Kiểm tra và audit bảo mật website định kỳ
- Sự khác biệt giữa tấn công CSRF với XSS và SQL Injection
- Các vụ tấn công CSRF kinh điển trong lịch sử
CSRF là gì?
CSRF (Cross-Site Request Forgery attack) là một hình thức tấn công giả mạo yêu cầu từ website khác, trong đó kẻ tấn công lợi dụng phiên đăng nhập của người dùng để gửi các yêu cầu trái phép đến một ứng dụng web mà người dùng đang được xác thực. Nói cách khác, tấn công CSRF khiến trình duyệt của người dùng vô tình thực hiện một hành động mà họ không chủ động yêu cầu, chẳng hạn như thay đổi thông tin tài khoản, gửi biểu mẫu, thực hiện giao dịch hoặc cập nhật dữ liệu trên hệ thống.
Điểm nguy hiểm của CSRF nằm ở việc kẻ tấn công không cần biết mật khẩu của nạn nhân mà chỉ cần dụ người dùng truy cập vào một liên kết hoặc trang web độc hại, sau đó lợi dụng cookie xác thực có sẵn trong trình duyệt để gửi yêu cầu đến website mục tiêu.
Ví dụ, khi người dùng đang đăng nhập vào một website ngân hàng, trình duyệt đã lưu cookie phiên làm việc. Nếu người dùng truy cập một trang web chứa mã CSRF, trang này có thể gửi yêu cầu giả mạo đến website ngân hàng và khiến hệ thống hiểu rằng đó là thao tác hợp lệ từ chính người dùng.
CSRF thường xảy ra ở các hệ thống web không kiểm tra nguồn gốc yêu cầu hoặc thiếu cơ chế xác thực bổ sung, gây ảnh hưởng đến tính bảo mật, quyền riêng tư và dữ liệu của người dùng.

Bản chất và cách thức hoạt động của cross site request forgery attack
Khác với nhiều hình thức tấn công yêu cầu khai thác trực tiếp vào hệ thống, cross site request forgery attack tập trung lợi dụng mối quan hệ tin cậy giữa trình duyệt người dùng và website mà họ đang đăng nhập. Kẻ tấn công không cần đánh cắp thông tin xác thực mà thay vào đó tạo ra các yêu cầu giả mạo khiến hệ thống hiểu nhầm đó là hành động hợp lệ từ người dùng.
1. Cơ chế cốt lõi
Bản chất của CSRF (Cross-Site Request Forgery) nằm ở việc lợi dụng cơ chế tự động gửi thông tin xác thực của trình duyệt, đặc biệt là cookie phiên đăng nhập. Khi người dùng đăng nhập vào một website, trình duyệt sẽ lưu lại cookie chứa thông tin phiên làm việc và tự động gửi cookie này trong các yêu cầu tiếp theo đến máy chủ.
Kẻ tấn công sẽ tạo một yêu cầu độc hại từ một website khác, sau đó dụ người dùng truy cập vào trang này. Khi yêu cầu được gửi đến website mục tiêu, trình duyệt vẫn đính kèm cookie xác thực, khiến máy chủ tin rằng yêu cầu đến từ chính người dùng đã đăng nhập.
Quá trình cross site request forgery attack thường gồm các bước:
- Người dùng đăng nhập vào một website hợp lệ và được cấp quyền truy cập thông qua cookie hoặc session.
- Kẻ tấn công tạo một yêu cầu có khả năng thực hiện hành động quan trọng trên website đó.
- Người dùng truy cập vào trang web hoặc liên kết chứa yêu cầu giả mạo.
- Trình duyệt tự động gửi yêu cầu đến website mục tiêu kèm thông tin xác thực.
- Máy chủ xử lý yêu cầu như một thao tác hợp lệ từ người dùng.
Điểm mấu chốt của CSRF là máy chủ không thể phân biệt được đâu là yêu cầu thật do người dùng chủ động thực hiện và đâu là yêu cầu bị giả mạo nếu không có cơ chế kiểm tra bổ sung.

2. Điều kiện cần và đủ để CSRF attack xảy ra
Một cuộc tấn công cross site request forgery attack thành công thường cần hội tụ một số điều kiện nhất định:
- Người dùng đã được xác thực trên website mục tiêu: Nạn nhân cần đang đăng nhập vào hệ thống bị tấn công. Khi đó, trình duyệt mới có thể tự động gửi cookie hoặc thông tin phiên làm việc kèm theo yêu cầu giả mạo.
- Website sử dụng cơ chế xác thực tự động: Các hệ thống sử dụng cookie để duy trì phiên đăng nhập thường có nguy cơ bị attack CSRF cao hơn nếu không triển khai thêm các lớp bảo vệ như CSRF Token hoặc SameSite Cookie.
- Kẻ tấn công có thể tạo yêu cầu hợp lệ đến máy chủ: Yêu cầu giả mạo phải có cấu trúc mà hệ thống chấp nhận, chẳng hạn như URL, tham số hoặc phương thức HTTP phù hợp để thực hiện một hành động cụ thể.
- Website không kiểm tra nguồn gốc yêu cầu: Nếu ứng dụng không xác minh request đến từ đâu hoặc không yêu cầu mã xác thực riêng cho từng thao tác, kẻ tấn công có thể dễ dàng lợi dụng lỗ hổng này.
3. Sơ đồ luồng tấn công CSRF
Luồng tấn công cross site request forgery attack có thể được mô tả đơn giản như sau:
Bước 1: Người dùng đăng nhập website mục tiêu
Người dùng truy cập website hợp lệ và đăng nhập tài khoản. Máy chủ cấp cookie phiên làm việc để ghi nhận trạng thái xác thực.
Bước 2: Kẻ tấn công tạo yêu cầu giả mạo
Kẻ tấn công xây dựng một request chứa hành động muốn thực hiện, sau đó đặt request này trên một website, email hoặc liên kết có khả năng tiếp cận người dùng.
Bước 3: Người dùng truy cập nội dung độc hại
Khi người dùng mở trang web chứa mã CSRF, trình duyệt tự động gửi yêu cầu đến website mục tiêu.
Bước 4: Máy chủ xử lý yêu cầu
Website mục tiêu nhận request cùng cookie xác thực và cho rằng đây là thao tác hợp lệ của người dùng.

Một số kịch bản tấn công CSRF phổ biến trong thực tế
Mặc dù các website hiện đại đã triển khai nhiều cơ chế bảo mật, CSRF vẫn có thể xảy ra nếu hệ thống xác thực hoặc xử lý yêu cầu không được thiết kế đúng cách. Dưới đây là những kịch bản tấn công cross site request forgery attack phổ biến mà người dùng và doanh nghiệp cần đặc biệt lưu ý.
- Thay đổi mật khẩu tài khoản: Đây là một trong những hình thức tấn công CSRF nguy hiểm nhất. Nếu website không xác minh CSRF Token hoặc không yêu cầu nhập lại mật khẩu khi đổi thông tin bảo mật, hacker có thể tạo một biểu mẫu giả mạo gửi yêu cầu thay đổi mật khẩu ngay khi nạn nhân đang đăng nhập. Khi đó, tài khoản có thể bị chiếm quyền kiểm soát mà người dùng không hề hay biết.
- Chuyển tiền trái phép trên website ngân hàng: Đối với các hệ thống Internet Banking hoặc ví điện tử có cơ chế bảo vệ chưa đầy đủ, kẻ tấn công có thể lợi dụng CSRF để gửi yêu cầu chuyển tiền đến tài khoản của chúng. Mặc dù hiện nay hầu hết ngân hàng đều sử dụng xác thực đa yếu tố (MFA) và OTP để giảm thiểu rủi ro, CSRF vẫn là mối đe dọa nếu quy trình xác thực giao dịch chưa được triển khai đúng.
- Thay đổi địa chỉ email hoặc thông tin cá nhân: Tin tặc có thể gửi yêu cầu cập nhật email, số điện thoại hoặc địa chỉ nhận hàng của nạn nhân. Sau khi thay đổi email thành công, chúng tiếp tục sử dụng chức năng "Quên mật khẩu" để chiếm quyền truy cập tài khoản. Đây là phương thức thường được nhắm đến trên các website thương mại điện tử hoặc nền tảng quản lý tài khoản trực tuyến.
- Đăng bài hoặc bình luận ngoài ý muốn: Trên các diễn đàn, mạng xã hội hoặc hệ thống quản trị nội dung (CMS), CSRF có thể khiến tài khoản của người dùng tự động đăng bài viết, bình luận hoặc chia sẻ liên kết độc hại mà họ không hề thực hiện. Điều này không chỉ ảnh hưởng đến uy tín cá nhân mà còn góp phần phát tán mã độc hoặc lừa đảo đến nhiều người khác. Một số website sử dụng phương thức GET hoặc POST cho các thao tác nhạy cảm như xóa bài viết, xóa tài khoản hoặc xóa cơ sở dữ liệu mà không kiểm tra CSRF Token.
- Xóa dữ liệu hoặc thực hiện hành động không thể hoàn tác: Một số website sử dụng phương thức GET hoặc POST cho các thao tác nhạy cảm như xóa bài viết, xóa tài khoản hoặc xóa cơ sở dữ liệu mà không kiểm tra CSRF Token. Trong trường hợp này, chỉ cần nạn nhân truy cập vào một trang web độc hại, hệ thống có thể tự động gửi yêu cầu xóa dữ liệu, gây mất mát thông tin và ảnh hưởng đến hoạt động của doanh nghiệp.

Lỗ hổng CSRF nguy hiểm như thế nào?
CSRF là một lỗ hổng bảo mật có thể gây ra nhiều hậu quả nghiêm trọng đối với cả người dùng cá nhân và doanh nghiệp. Nếu không được phát hiện và xử lý kịp thời, cuộc tấn công này có thể ảnh hưởng đến dữ liệu, tài chính và mức độ tin cậy của một hệ thống web.
1. Chiếm đoạt tài khoản và dữ liệu quan trọng
Một trong những tác động nguy hiểm nhất của cross site request forgery attack là khả năng khiến người dùng thực hiện các thao tác thay đổi thông tin tài khoản mà không nhận thức được. Kẻ tấn công có thể lợi dụng phiên đăng nhập hiện tại để gửi yêu cầu thay đổi email, số điện thoại, mật khẩu hoặc các thông tin bảo mật khác nếu hệ thống không có cơ chế xác thực bổ sung. Trong một số trường hợp, kiểm soát các thông tin này có thể tạo điều kiện để kẻ xâm nhập giành quyền truy cập vào tài khoản người dùng.
Bên cạnh tài khoản cá nhân, tấn công CSRF còn có thể ảnh hưởng đến những dữ liệu quan trọng được lưu trữ trên hệ thống. Nếu người dùng có quyền quản trị hoặc quyền truy cập cao, cuộc tấn công có thể dẫn đến việc thay đổi cấu hình, thao tác trên dữ liệu nội bộ hoặc gây ảnh hưởng đến hoạt động của toàn bộ ứng dụng. Mức độ thiệt hại phụ thuộc vào quyền hạn của tài khoản bị khai thác và mức độ bảo vệ của hệ thống.
2. Rò rỉ và bị thay đổi thông tin cá nhân
CSRF có thể khiến thông tin cá nhân của người dùng bị thay đổi hoặc bị lạm dụng thông qua các thao tác trái phép. Kẻ tấn công có thể tạo yêu cầu nhằm cập nhật thông tin hồ sơ, thay đổi cài đặt tài khoản hoặc thực hiện các hành động làm mất tính chính xác của dữ liệu.
Ngoài nguy cơ thay đổi dữ liệu, CSRF còn có thể góp phần làm lộ các thông tin nhạy cảm nếu hệ thống có những chức năng xử lý dữ liệu chưa được bảo vệ đầy đủ. Khi người dùng bị buộc thực hiện các thao tác ngoài ý muốn, dữ liệu có thể bị gửi đến các địa chỉ không mong muốn hoặc bị khai thác cho những mục đích khác. Vì vậy, các ứng dụng quản lý thông tin cá nhân cần đặc biệt chú trọng đến việc phòng chống CSRF.

3. Thiệt hại tài chính trực tiếp
Trong các hệ thống liên quan đến giao dịch trực tuyến, CSRF có thể gây ra những tổn thất tài chính nghiêm trọng. Kẻ tấn công có thể lợi dụng quyền đăng nhập của người dùng để tạo các yêu cầu thực hiện giao dịch, thay đổi thông tin thanh toán hoặc thực hiện những hành động ảnh hưởng đến tài sản nếu ứng dụng thiếu lớp bảo vệ phù hợp. Người dùng có thể gặp rủi ro khi các thao tác này diễn ra mà không có sự xác nhận rõ ràng.
Các nền tảng thương mại điện tử, ngân hàng trực tuyến hoặc dịch vụ thanh toán thường là mục tiêu có giá trị cao đối với các cuộc cross site request forgery attack. Chỉ một lỗ hổng nhỏ trong quy trình xác thực cũng có thể gây ra thiệt hại lớn về tài chính và ảnh hưởng đến trải nghiệm khách hàng. Do đó, kiểm tra và bảo vệ các chức năng quan trọng là yêu cầu cần thiết trong quá trình phát triển hệ thống.
4. Ảnh hưởng uy tín doanh nghiệp
Khi một website hoặc ứng dụng bị khai thác thông qua tấn công CSRF, doanh nghiệp có thể phải đối mặt với sự suy giảm niềm tin từ khách hàng. Người dùng thường đánh giá cao những nền tảng có khả năng bảo vệ thông tin và giao dịch an toàn, vì vậy các sự cố bảo mật có thể ảnh hưởng trực tiếp đến hình ảnh thương hiệu.
Đặc biệt, những doanh nghiệp hoạt động trong lĩnh vực tài chính, thương mại điện tử hoặc dịch vụ trực tuyến càng chịu nhiều tác động hơn. Ngoài tổn thất về danh tiếng, doanh nghiệp còn có thể phải đối mặt với chi phí xử lý sự cố, khắc phục lỗ hổng và nâng cấp hệ thống bảo mật.

Cách nhận biết website có lỗ hổng CSRF
Phát hiện lỗ hổng CSRF cần được thực hiện thông qua quá trình kiểm tra cả phía trình duyệt, cơ chế quản lý phiên và mã nguồn ứng dụng. Không giống một số lỗi bảo mật có dấu hiệu rõ ràng, cross site request forgery attack thường ẩn bên trong cách hệ thống xử lý yêu cầu từ người dùng. Dưới đây là một số cách giúp nhận biết website có nguy cơ tồn tại lỗ hổng CSRF.
Đầu tiên là phân tích cách website gửi và xử lý các HTTP Request cùng thuộc tính của Cookie phiên đăng nhập. Thông qua quan sát các yêu cầu từ trình duyệt, có thể xác định hệ thống có đang tự động gửi thông tin xác thực hay có cơ chế kiểm tra nguồn gốc request hay không. Đây là bước quan trọng giúp phát hiện nhanh những điểm có khả năng bị khai thác bởi CSRF.
(1) Phân tích cơ chế quản lý phiên (Session management)
Mục tiêu của bước này là xác định website xác thực người dùng bằng cách nào và liệu trình duyệt có tự động gửi thông tin đăng nhập trong mọi request hay không.
Bước 1: Đăng nhập vào website
Trước tiên, bạn đăng nhập bằng một tài khoản thử nghiệm. Sau khi đăng nhập thành công, mở Developer Tools (F12) trên trình duyệt và chuyển đến tab Network. Việc này giúp ghi lại toàn bộ các HTTP Request và HTTP Response được gửi giữa trình duyệt và máy chủ.
Bước 2: Quan sát Cookie phiên
Bạn chọn một request bất kỳ gửi đến website, sau đó kiểm tra phần Request Headers.
Bạn tìm header: Cookie:
Ví dụ: Cookie: SESSIONID=8ab92fd38e12abf; user=admin
Nếu website sử dụng Session Cookie để xác thực thì đây là điều kiện để CSRF có thể xảy ra. Tuy nhiên, website vẫn có thể an toàn nếu đã triển khai CSRF Token, SameSite Cookie hoặc các cơ chế xác thực bổ sung.
Bước 3: Kiểm tra thuộc tính của Cookie
Bạn mở tab Application (Chrome) hoặc Storage (Firefox) rồi chọn Cookies. Sau đó, bạn kiểm tra các thuộc tính:
| Thuộc tính | Ý nghĩa |
| HttpOnly | Không trực tiếp chống CSRF. |
| Secure | Giảm rủi ro truyền Cookie qua HTTP. |
| SameSite | Là cơ chế quan trọng chống CSRF. |
Thuộc tính SameSite giúp trình duyệt kiểm soát việc gửi Cookie trong các yêu cầu giữa các website (cross-site requests). Đây là một trong những cơ chế quan trọng giúp giảm nguy cơ tấn công CSRF bằng cách hạn chế trình duyệt tự động đính kèm Cookie phiên khi request được khởi tạo từ một tên miền khác.
Mục tiêu của bước này là xác định Cookie phiên của website có được cấu hình thuộc tính SameSite hay không và giá trị được sử dụng có phù hợp với yêu cầu bảo mật.
Bước 1: Mở danh sách Cookie của website
Sau khi đăng nhập vào website, mở Developer Tools (F12) và chuyển đến:
- Chrome: Application → Storage → Cookies.
- Firefox: Storage → Cookies.
Chọn tên miền của website để xem danh sách các Cookie đang được lưu trên trình duyệt.
Bước 2: Xác định Cookie phiên
Trong danh sách Cookie, bạn tìm Cookie dùng để duy trì phiên đăng nhập, thường có các tên như:
- SESSIONID
- PHPSESSID
- JSESSIONID
- ASP.NET_SessionId
Đây là Cookie cần được kiểm tra vì nó chứa thông tin xác thực của người dùng.
Bước 3: Kiểm tra giá trị của thuộc tính SameSite
Bạn quan sát cột SameSite và xác định giá trị đang được sử dụng.
| Giá trị | Ý nghĩa | Mức độ bảo vệ CSRF |
| Strict | Chỉ gửi Cookie khi điều hướng trong cùng website. | Rất cao |
| Lax | Chỉ gửi Cookie trong một số trường hợp điều hướng hợp lệ. | Cao |
| None | Cookie được gửi trong cả yêu cầu cùng website và liên website (phải đi kèm Secure). | Thấp hơn |
| Không có | Trình duyệt hoặc máy chủ không thiết lập SameSite. | Có nguy cơ cao hơn |
Nếu Cookie không có thuộc tính SameSite hoặc được đặt là SameSite=None mà không thực sự cần thiết, trình duyệt có thể gửi Cookie trong các yêu cầu xuất phát từ website khác. Điều này làm tăng nguy cơ bị khai thác thông qua tấn công CSRF nếu hệ thống không có các cơ chế bảo vệ khác.
(3) Đánh giá các Request thay đổi trạng thái (State-changing requests)
Các request có khả năng thay đổi trạng thái hệ thống thường là mục tiêu chính của các cuộc tấn công CSRF. Những yêu cầu như cập nhật thông tin cá nhân, đổi mật khẩu, xóa dữ liệu hoặc thực hiện giao dịch cần được kiểm tra kỹ về cách xác thực. Nếu các request này chỉ dựa vào cookie phiên mà không yêu cầu thêm thông tin xác minh, nguy cơ bị khai thác sẽ cao hơn.
Mục tiêu của bước này là xác định liệu các request quan trọng có được bảo vệ bằng các cơ chế chống CSRF hay chỉ dựa vào Session Cookie để xác thực.
Bước 1: Xác định các chức năng quan trọng
Trước tiên, bạn hãy thực hiện các thao tác có khả năng làm thay đổi dữ liệu trên website, ví dụ:
- Thay đổi mật khẩu.
- Cập nhật email hoặc số điện thoại.
- Chỉnh sửa thông tin tài khoản.
- Tạo hoặc xóa dữ liệu.
- Thanh toán hoặc chuyển tiền.
- Thay đổi quyền người dùng.
Bạn mở Developer Tools → Network để ghi lại request tương ứng.
Bước 2: Kiểm tra phương thức HTTP
Bạn chọn request vừa được gửi và kiểm tra trường Request Method. Các thao tác thay đổi dữ liệu nên sử dụng:
- POST.
- PUT.
- PATCH.
- DELETE.
Nếu website sử dụng GET cho các hành động như xóa dữ liệu hoặc cập nhật thông tin, đây là dấu hiệu thiết kế chưa an toàn vì request có thể bị kích hoạt chỉ thông qua một liên kết hoặc hình ảnh.
Bước 3: Kiểm tra request có sử dụng CSRF Token hay không
Sau khi xác định request thay đổi trạng thái, bạn cần kiểm tra phần Request Payload, Form Data hoặc Body để xem có chứa tham số CSRF Token hay không.
CSRF Token thường là một chuỗi ngẫu nhiên được tạo riêng cho từng phiên hoặc từng request và được máy chủ kiểm tra trước khi xử lý yêu cầu.
Nếu request chỉ bao gồm dữ liệu người dùng và Session Cookie mà không có CSRF Token hoặc cơ chế bảo vệ tương đương, website có nguy cơ tồn tại lỗ hổng CSRF.
Bước 4: Đánh giá cơ chế xác thực bổ sung
Đối với các thao tác có mức độ rủi ro cao, website nên yêu cầu xác thực bổ sung trước khi xử lý request, chẳng hạn:
- Nhập lại mật khẩu.
- Xác thực OTP.
- Xác thực đa yếu tố (MFA).
- Xác nhận qua email hoặc ứng dụng xác thực.
Nếu các thao tác quan trọng chỉ cần Session Cookie để thực hiện mà không có bất kỳ bước xác minh nào khác, hậu quả của một cuộc tấn công CSRF sẽ nghiêm trọng hơn nếu lỗ hổng tồn tại.

2. Kiểm tra cơ chế bảo vệ trong mã nguồn (Source code review)
Source code review giúp đánh giá cách ứng dụng triển khai các cơ chế phòng chống CSRF ở cả phía giao diện (frontend) và máy chủ (backend). Thông qua kiểm tra mã nguồn, lập trình viên có thể xác định biểu mẫu có sử dụng CSRF Token hay không, framework đã kích hoạt các tính năng bảo mật mặc định chưa và các thao tác nhạy cảm có được bảo vệ bằng lớp xác thực bổ sung hay không.
(1) Kiểm tra tầng mã nguồn giao diện (Frontend form audit)
Ở tầng giao diện, mục tiêu là kiểm tra cách ứng dụng tạo biểu mẫu và gửi các yêu cầu đến máy chủ. Rà soát mã nguồn frontend giúp xác định các thao tác thay đổi dữ liệu có được bổ sung cơ chế chống CSRF ngay từ phía client hay không.
Bước 1: Kiểm tra các biểu mẫu (Form)
Bạn mở mã nguồn HTML hoặc sử dụng công cụ Developer Tools để kiểm tra các form thực hiện thao tác như đăng nhập, cập nhật thông tin, đổi mật khẩu hoặc thanh toán.
Đối với các biểu mẫu sử dụng phương thức POST, hãy xác định xem chúng có chứa trường ẩn (hidden field) lưu CSRF Token hay không.
Ví dụ:
< form action="/change-password" method="POST">
< input type ="hidden" name="_csrf" value="a8f9c1d3e4b5">
...
< /form >
Nếu biểu mẫu gửi dữ liệu đến máy chủ nhưng không kèm theo CSRF Token, website có thể tồn tại nguy cơ bị tấn công CSRF nếu phía backend cũng không triển khai cơ chế xác thực tương ứng.
Bước 2: Kiểm tra các request AJAX hoặc Fetch API
Nhiều website hiện nay sử dụng AJAX, Fetch API hoặc các thư viện như Axios để gửi dữ liệu thay vì biểu mẫu HTML truyền thống.
Bạn cần kiểm tra mã JavaScript để xác định các request POST, PUT, PATCH hoặc DELETE có gửi kèm CSRF Token trong phần Header hoặc Request Body hay không.
Ví dụ:
fetch ("/api/profile", {
method : "POST",
headers: {
"X-CSRF-Token": csrfToken
}
});
Nếu các request chỉ gửi dữ liệu người dùng mà không kèm theo Token hoặc cơ chế xác thực khác, đây là dấu hiệu cần được kiểm tra thêm ở phía backend.
Bước 3: Kiểm tra cách lưu trữ và truyền CSRF Token
Bạn xác định cách frontend lấy và sử dụng CSRF Token, chẳng hạn:
- Đọc từ thẻ < meta >.
- Lấy từ trường hidden trong biểu mẫu.
- Nhận từ phản hồi của máy chủ (Response).
- Được framework tự động chèn vào request.
Đồng thời, kiểm tra xem Token có được gửi cùng mọi request thay đổi trạng thái hay chỉ áp dụng cho một số chức năng nhất định.
Bước 4: Đánh giá kết quả
Sau khi kiểm tra mã nguồn frontend, có thể đánh giá sơ bộ như sau:
| Dấu hiệu | Đánh giá |
| Form POST có CSRF Token. | An toàn hơn. |
| AJAX/Fetch gửi Token trong Header hoặc Body. | An toàn hơn. |
| Token được tạo và cập nhật hợp lý. | Tăng khả năng chống CSRF. |
| Form hoặc API không gửi CSRF Token. | Cần kiểm tra thêm phía backend. |
| Chỉ dựa vào Session Cookie để xác thực. | Nguy cơ bị khai thác CSRF cao hơn. |
(2) Kiểm tra cấu hình bảo mật phía backend (Framework security configurations
Phía backend đóng vai trò quyết định trong ngăn chặn các cuộc tấn công CSRF. Vì vậy, cần kiểm tra cách framework và máy chủ xác thực các request thay đổi trạng thái, quản lý Session Cookie và triển khai các cơ chế bảo vệ mặc định.
Bước 1: Kiểm tra cơ chế chống CSRF của framework
Trước tiên, xác định framework mà ứng dụng đang sử dụng và kiểm tra xem tính năng chống CSRF mặc định đã được kích hoạt hay chưa. Đồng thời, hãy rà soát các Middleware, Filter hoặc Interceptor để đảm bảo cơ chế xác thực CSRF được áp dụng cho tất cả các request POST, PUT, PATCH và DELETE. Nếu có route hoặc API bị loại trừ khỏi quá trình kiểm tra mà không có lý do phù hợp, website có thể phát sinh lỗ hổng CSRF.
Bước 2: Kiểm tra cơ chế xác thực request
Tiếp theo, bạn kiểm tra cách backend xử lý các request thay đổi trạng thái. Máy chủ cần xác minh CSRF Token trước khi xử lý yêu cầu và từ chối các request thiếu Token, Token không hợp lệ hoặc đã hết hạn.
Ngoài ra, bạn nên kiểm tra xác minh tiêu đề HTTP Origin hoặc Referer nhằm đảm bảo request được gửi từ đúng tên miền của website. Nếu backend chỉ dựa vào Session Cookie để xác thực mà không kiểm tra Token hoặc nguồn gốc request, nguy cơ bị khai thác CSRF sẽ cao hơn.
Bước 3: Kiểm tra cấu hình Session và Cookie
Cuối cùng, rà soát cách backend quản lý Session Cookie. Cookie phiên nên được cấu hình với các thuộc tính HttpOnly, Secure và SameSite=Lax hoặc SameSite=Strict để hạn chế nguy cơ bị lợi dụng trong các yêu cầu liên trang.
Bên cạnh đó, cần đánh giá tổng thể xem backend đã kết hợp đầy đủ các lớp bảo vệ như CSRF Token, SameSite Cookie, kiểm tra Origin/Referer và xác thực bổ sung cho các thao tác quan trọng hay chưa. Triển khai đồng thời nhiều cơ chế sẽ giúp giảm đáng kể nguy cơ website bị tấn công CSRF.
(3) Kiểm tra cơ chế bảo vệ kép (Re-authentication & headers)
Ngoài CSRF Token và các cấu hình bảo mật ở backend, website nên triển khai thêm các lớp bảo vệ bổ sung cho những thao tác có mức độ rủi ro cao. Việc kiểm tra các cơ chế này giúp đánh giá khả năng giảm thiểu tác động nếu xảy ra tấn công CSRF hoặc các hình thức tấn công liên quan.
Bước 1: Kiểm tra cơ chế xác thực lại (Re-authentication)
Đối với các thao tác quan trọng như thay đổi mật khẩu, cập nhật email, thay đổi quyền truy cập hoặc thực hiện giao dịch, website nên yêu cầu người dùng xác thực lại ngay trước khi xử lý yêu cầu. Các hình thức xác thực bổ sung trên web có thể bao gồm:
- Nhập lại mật khẩu hiện tại.
- Xác thực OTP.
- Xác thực đa yếu tố (MFA).
- Xác nhận thông qua email hoặc ứng dụng xác thực.
Nếu người dùng chỉ cần duy trì trạng thái đăng nhập và gửi request là có thể thực hiện các thao tác nhạy cảm, mức độ ảnh hưởng khi CSRF xảy ra sẽ nghiêm trọng hơn.
Bước 2: Kiểm tra các HTTP Security Headers
Tiếp theo, tiến hành kiểm tra phản hồi từ máy chủ (HTTP Response Headers) để đánh giá các header bảo mật được triển khai. Một số header cần quan tâm:
- Content-Security-Policy (CSP): Hỗ trợ giảm nguy cơ các cuộc tấn công kết hợp như XSS, từ đó hạn chế khả năng kẻ tấn công tạo ra các request giả mạo.
- Referrer-Policy: Kiểm soát thông tin URL được gửi trong header Referer, giúp bảo vệ dữ liệu nguồn truy cập.
- X-Frame-Options: Hạn chế website bị nhúng vào iframe từ nguồn không tin cậy, giúp giảm nguy cơ Clickjacking - Một kỹ thuật thường được kết hợp với CSRF.
Bước 3: Đánh giá mức độ bảo vệ tổng thể
Sau khi kiểm tra, bạn cần đánh giá khả năng kết hợp giữa các lớp bảo mật:
- CSRF Token được xác minh ở backend.
- Cookie phiên có cấu hình bảo mật phù hợp.
- Origin/Referer được kiểm tra khi xử lý request.
- Các thao tác nhạy cảm yêu cầu xác thực bổ sung.
- Security Headers được triển khai phù hợp.

3. Xác thực lỗ hổng CSRF bằng kỹ thuật tạo PoC (Proof of Concept)
Kỹ thuật Proof of Concept (PoC) được sử dụng để tạo một tình huống kiểm thử mô phỏng, nhằm đánh giá khả năng máy chủ có chấp nhận các request được gửi từ nguồn bên ngoài hay không. Quá trình này giúp phân biệt giữa nguy cơ lý thuyết và lỗ hổng có thể khai thác thực tế. Kiểm thử cần được thực hiện trong môi trường được cấp phép, chẳng hạn như hệ thống nội bộ, ứng dụng thử nghiệm hoặc website do cá nhân/doanh nghiệp sở hữu.
(1) Tạo form giả mạo để test lỗ hổng CSRF
Một trong những phương pháp phổ biến để xác thực CSRF là tạo một biểu mẫu HTML giả lập gửi request đến chức năng nhạy cảm của website. Quy trình kiểm tra gồm:
- Xác định request thay đổi trạng thái cần kiểm tra (ví dụ: cập nhật thông tin, thay đổi cài đặt tài khoản).
- Sao chép cấu trúc request từ công cụ Developer Tools hoặc công cụ kiểm thử bảo mật.
- Tạo một form mô phỏng gửi yêu cầu tương tự từ một nguồn khác.
- Kiểm tra xem máy chủ có yêu cầu CSRF Token hoặc xác minh nguồn gốc request trước khi xử lý hay không.
Nếu request giả mạo bị máy chủ từ chối do thiếu Token hoặc không hợp lệ về nguồn gốc, điều đó cho thấy cơ chế chống CSRF đang hoạt động hiệu quả. Ngược lại, nếu máy chủ vẫn xử lý request và thực hiện thay đổi dữ liệu khi chỉ dựa vào Session Cookie, website có nguy cơ tồn tại lỗ hổng CSRF.
(2) Kiểm tra phản hồi từ server
Sau khi gửi request kiểm thử, cần phân tích phản hồi trả về từ máy chủ để đánh giá cơ chế bảo vệ. Một số yếu tố cần kiểm tra bao gồm:
- HTTP Status Code: Máy chủ có trả về lỗi khi request thiếu CSRF Token hoặc đến từ nguồn không hợp lệ hay không.
- Response Message: Kiểm tra nội dung phản hồi để xác định server có thông báo từ chối yêu cầu do lỗi xác thực CSRF hay không.
- Trạng thái dữ liệu: Xác minh thao tác có thực sự được thực hiện hay bị chặn lại.
Các dấu hiệu cho thấy website được bảo vệ tốt:
- Request không có CSRF Token bị từ chối.
- Request từ Origin không hợp lệ không được xử lý.
- Server yêu cầu xác thực bổ sung trước các thao tác quan trọng.
(3) Sử dụng công cụ kiểm thử chuyên sâu
Đối với các hệ thống phức tạp, kiểm tra thủ công có thể không đủ để phát hiện đầy đủ các điểm yếu liên quan đến CSRF. Các công cụ kiểm thử bảo mật chuyên dụng giúp phân tích HTTP Request, kiểm tra CSRF Token, Cookie, Header và hỗ trợ tạo PoC để xác minh khả năng khai thác. Một số công cụ phổ biến gồm:
- Burp Suite: Công cụ kiểm thử bảo mật web phổ biến, hỗ trợ bắt, chỉnh sửa và gửi lại HTTP Request để phân tích cơ chế xác thực, Cookie và CSRF Token. Burp Suite cho phép kiểm tra cách máy chủ phản hồi khi request bị thay đổi, thiếu Token hoặc xuất phát từ nguồn không hợp lệ. Đây là công cụ được nhiều chuyên gia bảo mật sử dụng trong quá trình kiểm thử ứng dụng web.
- OWASP ZAP (Zed Attack Proxy): Công cụ mã nguồn mở do OWASP phát triển, hỗ trợ quét lỗ hổng web, phân tích request và phát hiện các vấn đề liên quan đến CSRF. ZAP có khả năng theo dõi lưu lượng giữa trình duyệt và máy chủ, đồng thời hỗ trợ đánh giá các cấu hình bảo mật như Cookie, Header và cơ chế xác thực. Công cụ này phù hợp cho cả quá trình học tập, nghiên cứu và kiểm thử bảo mật cơ bản.
- Postman: Công cụ hỗ trợ gửi và kiểm tra API Request, giúp đánh giá cách backend xử lý các yêu cầu thay đổi trạng thái. Postman cho phép kiểm tra các phương thức HTTP như POST, PUT, PATCH, DELETE và tùy chỉnh Header, Cookie hoặc Token để đánh giá cơ chế xác thực của API. Công cụ này đặc biệt hữu ích với các ứng dụng sử dụng REST API hoặc kiến trúc frontend tách biệt backend.
- Browser Developer Tools: Công cụ tích hợp trên trình duyệt, hỗ trợ quan sát Network Request, Cookie, Header và dữ liệu gửi giữa client với server. Developer Tools giúp kiểm tra nhanh CSRF Token có được gửi kèm request hay không, Cookie có cấu hình SameSite phù hợp hay không và phát hiện các request thay đổi trạng thái trong quá trình sử dụng website. Đây là công cụ cơ bản nhưng rất hữu ích trong bước phân tích ban đầu.

Giải pháp phòng chống tấn công CSRF hiệu quả cho website
Tấn công CSRF có thể gây ảnh hưởng nghiêm trọng khi kẻ tấn công lợi dụng phiên đăng nhập hợp lệ để thực hiện các hành động trái phép thay cho người dùng. Để giảm thiểu rủi ro, website cần triển khai nhiều lớp bảo vệ kết hợp giữa frontend, backend, trình duyệt và cơ chế xác thực người dùng. Dưới đây là các giải pháp phổ biến giúp ngăn chặn hiệu quả các cuộc tấn công CSRF và tăng cường mức độ an toàn cho hệ thống.
1. Triển khai Anti-CSRF Token
Anti-CSRF Token là một trong những phương pháp bảo vệ CSRF phổ biến và hiệu quả nhất hiện nay. Cơ chế này hoạt động bằng cách tạo một chuỗi Token ngẫu nhiên, gắn với phiên đăng nhập của người dùng và yêu cầu gửi kèm trong các request thay đổi trạng thái. Khi nhận được yêu cầu, máy chủ sẽ kiểm tra Token có hợp lệ hay không trước khi thực hiện thao tác.
Token cần được tạo bởi máy chủ, có độ dài đủ lớn và không thể dự đoán bởi kẻ tấn công. Các request như thay đổi mật khẩu, cập nhật thông tin cá nhân, thanh toán hoặc xóa dữ liệu nên bắt buộc phải chứa CSRF Token hợp lệ. Nếu Token bị thiếu hoặc không chính xác, server cần từ chối xử lý request để ngăn chặn hành vi giả mạo.
Thuộc tính SameSite của Cookie giúp kiểm soát việc trình duyệt gửi Cookie trong các yêu cầu được tạo từ website khác. Khi cấu hình SameSite=Strict hoặc SameSite=Lax, trình duyệt có thể hạn chế việc tự động đính kèm Session Cookie trong các request liên trang, từ đó giảm nguy cơ bị khai thác CSRF.
Ngoài SameSite, Cookie phiên nên được thiết lập thêm các thuộc tính bảo mật như Secure và HttpOnly. Secure giúp Cookie chỉ được truyền qua kết nối HTTPS, trong khi HttpOnly ngăn JavaScript phía trình duyệt truy cập trực tiếp vào Cookie. Tuy nhiên, SameSite chỉ là lớp bảo vệ bổ sung và không thể thay thế hoàn toàn cho CSRF Token.
3. Sử dụng Custom HTTP Headers
Custom HTTP Headers là một cơ chế thường được sử dụng để xác thực các request gửi từ ứng dụng frontend đến backend. Website có thể yêu cầu các request thay đổi dữ liệu phải chứa một Header đặc biệt như X-CSRF-Token hoặc một giá trị xác thực riêng trước khi máy chủ xử lý.
Phương pháp này đặc biệt phù hợp với các ứng dụng sử dụng AJAX, Fetch API hoặc SPA (Single Page Application). Vì trình duyệt thường không tự động thêm các Header tùy chỉnh vào request liên miền, kẻ tấn công khó có thể tạo request giả mạo hợp lệ. Tuy nhiên, backend vẫn cần kiểm tra Header này để đảm bảo request thực sự hợp lệ.

4. Kiểm tra và xác thực Origin/ Referer
Máy chủ có thể kiểm tra hai HTTP Header là Origin và Referer để xác định nguồn gốc của request. Nếu yêu cầu được gửi từ một website không thuộc danh sách được phép, server có thể từ chối xử lý nhằm ngăn chặn các request giả mạo. Cơ chế này giúp bổ sung thêm một lớp bảo vệ bên cạnh CSRF Token và SameSite Cookie. Tuy nhiên, Referer đôi khi có thể bị trình duyệt giới hạn hoặc loại bỏ vì lý do bảo mật, do đó xác minh Origin thường được ưu tiên hơn trong nhiều trường hợp.
5. Yêu cầu xác thực bổ sung cho tác vụ nhạy cảm
Đối với các thao tác có mức độ ảnh hưởng cao như đổi mật khẩu, chuyển tiền, thay đổi quyền quản trị hoặc xóa tài khoản, website nên yêu cầu người dùng xác thực lại danh tính. Các phương pháp phổ biến bao gồm:
- Nhập lại mật khẩu.
- Xác thực OTP .
- Sử dụng xác thực đa yếu tố (MFA).
Lớp bảo vệ này giúp giảm thiểu thiệt hại ngay cả khi kẻ tấn công vượt qua được một số cơ chế chống CSRF. Yêu cầu xác nhận bổ sung cũng giúp ngăn chặn các hành động quan trọng bị thực hiện tự động chỉ dựa trên trạng thái đăng nhập hiện tại.
6. Không sử dụng phương thức GET cho hành động thay đổi dữ liệu
Phương thức GET trong HTTP được thiết kế chủ yếu để truy xuất dữ liệu từ máy chủ và không nên được sử dụng cho các thao tác làm thay đổi trạng thái hệ thống. Các hành động như xóa dữ liệu, cập nhật thông tin tài khoản, thay đổi mật khẩu hoặc thực hiện giao dịch nếu được xử lý bằng GET có thể tạo điều kiện cho kẻ tấn công lợi dụng để gửi request giả mạo thông qua CSRF.
Ví dụ, một URL dạng: GET /delete-account?id=123 có thể bị kích hoạt chỉ bằng việc người dùng truy cập vào một liên kết hoặc tải một tài nguyên từ website khác. Trong trường hợp trình duyệt vẫn tự động gửi Session Cookie, máy chủ có thể hiểu đây là yêu cầu hợp lệ từ người dùng đang đăng nhập và thực hiện hành động ngoài ý muốn.

7. Bảo vệ API khỏi CSRF (đặc biệt với SPA và RESTful API)
Các ứng dụng hiện đại sử dụng kiến trúc SPA (Single Page Application) và RESTful API thường tách biệt phần giao diện frontend và backend, khiến quản lý xác thực trở nên phức tạp hơn. Nếu API sử dụng Cookie để lưu Session hoặc Access Token, trình duyệt vẫn có thể tự động gửi Cookie trong các request liên trang, tạo điều kiện cho CSRF xảy ra. Vì vậy, các API thực hiện thao tác thay đổi dữ liệu như tạo, sửa, xóa hoặc cập nhật thông tin cần được bảo vệ bằng các cơ chế xác thực request phù hợp.
Đối với các API sử dụng Cookie-based Authentication, cần triển khai CSRF Token, kiểm tra Origin/Referer và cấu hình SameSite Cookie để hạn chế request giả mạo. Với các ứng dụng SPA, CSRF Token thường được gửi thông qua Custom HTTP Header như X-CSRF-Token hoặc X-XSRF-TOKEN, sau đó backend sẽ kiểm tra tính hợp lệ trước khi xử lý request. Việc kết hợp nhiều lớp bảo vệ giúp đảm bảo chỉ những request được tạo từ ứng dụng hợp lệ mới có thể thực hiện thay đổi dữ liệu.
8. Sử dụng framework và thư viện có sẵn cơ chế chống CSRF attack
Nhiều framework phát triển web hiện nay đã tích hợp sẵn cơ chế bảo vệ CSRF như Laravel, Django, Spring Security hoặc ASP.NET Core. Sử dụng các tính năng bảo mật mặc định giúp giảm nguy cơ lập trình viên tự triển khai sai hoặc bỏ sót các bước kiểm tra quan trọng.
Tuy nhiên, bật tính năng chống CSRF chưa đủ để đảm bảo an toàn tuyệt đối, bạn cần kiểm tra cấu hình framework, tránh vô hiệu hóa middleware không cần thiết và đảm bảo tất cả các route nhạy cảm đều được áp dụng cơ chế bảo vệ.
9. Sử dụng CAPTCHA
CAPTCHA không phải là cơ chế ngăn chặn CSRF trực tiếp nhưng có thể được sử dụng như một lớp bảo vệ bổ sung cho các chức năng nhạy cảm hoặc dễ bị lạm dụng. Cơ chế này yêu cầu người dùng thực hiện một bước xác minh nhằm chứng minh request được tạo ra bởi người dùng thật thay vì một chương trình tự động hoặc bot. Điều này giúp giảm nguy cơ kẻ tấn công tự động gửi số lượng lớn yêu cầu trái phép đến hệ thống.
CAPTCHA thường được áp dụng cho các chức năng như đăng ký tài khoản, gửi biểu mẫu, khôi phục mật khẩu hoặc thực hiện các thao tác có nguy cơ bị khai thác cao. Tuy nhiên, CAPTCHA không thể xác minh nguồn gốc của request và không ngăn chặn hoàn toàn CSRF, vì vậy website vẫn cần kết hợp với các cơ chế bảo vệ chính như CSRF Token, SameSite Cookie và kiểm tra Origin/Referer để đảm bảo an toàn.
10. Kiểm tra và audit bảo mật website định kỳ
Kiểm tra và audit bảo mật website định kỳ giúp phát hiện sớm các lỗ hổng CSRF cũng như những vấn đề bảo mật khác có thể phát sinh trong quá trình phát triển và vận hành hệ thống. Khi website được cập nhật thêm tính năng mới, thay đổi cấu trúc API hoặc điều chỉnh cơ chế xác thực, các lớp bảo vệ hiện có có thể bị ảnh hưởng nếu không được đánh giá lại. Do đó, kiểm tra bảo mật thường xuyên là bước quan trọng để duy trì khả năng phòng chống các cuộc tấn công giả mạo request.
Quá trình audit có thể bao gồm nhiều phương pháp như Source Code Review, kiểm tra cấu hình bảo mật, Penetration Testing (Pentest) và sử dụng các công cụ quét lỗ hổng như Burp Suite hoặc OWASP ZAP. Đặc biệt, cần thường xuyên kiểm tra các chức năng thay đổi dữ liệu như cập nhật tài khoản, thanh toán, quản trị người dùng để đảm bảo CSRF Token, Cookie bảo mật và các cơ chế xác thực vẫn hoạt động đúng. Audit định kỳ không chỉ giúp phát hiện lỗ hổng CSRF mà còn góp phần nâng cao mức độ an toàn tổng thể cho website.

Sự khác biệt giữa tấn công CSRF với XSS và SQL Injection
Trong bảo mật ứng dụng web, CSRF, XSS và SQL Injection đều là những lỗ hổng phổ biến có thể gây ảnh hưởng nghiêm trọng đến hệ thống. Tuy nhiên, mỗi loại tấn công lại khai thác một điểm yếu khác nhau từ cách xử lý yêu cầu người dùng, khả năng thực thi mã độc cho đến truy cập trái phép vào cơ sở dữ liệu. Phân biệt rõ 3 hình thức này giúp lập trình viên lựa chọn phương pháp phòng chống phù hợp và xây dựng hệ thống an toàn hơn.
.
| Tiêu chí | CSRF (Cross-Site Request Forgery) | XSS (Cross-Site Scripting) | SQL Injection |
| Khái niệm | Là hình thức tấn công giả mạo yêu cầu, trong đó kẻ tấn công lợi dụng phiên đăng nhập của người dùng để thực hiện hành động trái phép trên website. | Là lỗ hổng cho phép kẻ tấn công chèn mã script độc hại vào website, sau đó mã này được thực thi trên trình duyệt của người dùng khác. | Là kỹ thuật chèn câu lệnh SQL độc hại vào dữ liệu đầu vào nhằm thao túng truy vấn và truy cập trái phép vào cơ sở dữ liệu. |
| Mục tiêu tấn công | Lợi dụng quyền của người dùng đã xác thực để thực hiện các thao tác ngoài ý muốn. | Chiếm quyền kiểm soát trình duyệt, đánh cắp thông tin phiên hoặc thay đổi nội dung hiển thị trên website. | Khai thác cơ sở dữ liệu để đọc, sửa, xóa hoặc lấy cắp thông tin lưu trữ trong hệ thống. |
| Đối tượng bị khai thác | Cơ chế xác thực, cookie phiên đăng nhập và cách website xử lý request. | Việc xử lý dữ liệu đầu vào và khả năng hiển thị nội dung không được kiểm soát trên trình duyệt. | Cách ứng dụng xây dựng và thực thi câu lệnh truy vấn dữ liệu. |
| Cách thức hoạt động | Kẻ tấn công tạo request giả mạo, dụ người dùng truy cập và lợi dụng cookie xác thực để gửi yêu cầu đến website mục tiêu. | Kẻ tấn công chèn mã JavaScript độc hại vào website, khiến trình duyệt nạn nhân thực thi đoạn mã này. | Kẻ tấn công đưa dữ liệu chứa câu lệnh SQL bất thường vào các trường nhập liệu để thay đổi logic truy vấn. |
| Yêu cầu người dùng đăng nhập | Thường cần người dùng đang đăng nhập vào hệ thống để tận dụng phiên xác thực. | Không nhất thiết cần người dùng đăng nhập, tùy thuộc vào mục tiêu khai thác. | Không phụ thuộc vào trạng thái đăng nhập của người dùng mà tập trung vào lỗ hổng xử lý dữ liệu của hệ thống. |
| Vị trí xảy ra tấn công | Chủ yếu liên quan đến giao tiếp giữa trình duyệt người dùng và máy chủ. | Chủ yếu xảy ra ở phía trình duyệt thông qua nội dung website được hiển thị. | Thường xảy ra ở tầng xử lý dữ liệu và giao tiếp giữa ứng dụng với cơ sở dữ liệu. |
| Hậu quả chính | Thực hiện giao dịch, thay đổi thông tin tài khoản hoặc thao tác trái phép dưới danh nghĩa người dùng. | Đánh cắp cookie, thay đổi giao diện website, theo dõi hành vi người dùng hoặc thực thi mã độc trên trình duyệt. | Làm lộ dữ liệu, thay đổi thông tin trong database hoặc gây ảnh hưởng đến toàn bộ hệ thống dữ liệu. |
| Ví dụ điển hình | Người dùng đang đăng nhập tài khoản ngân hàng và vô tình truy cập trang chứa request giả mạo khiến tài khoản thực hiện thao tác không mong muốn. | Kẻ tấn công chèn mã JavaScript vào phần bình luận, khiến mã này chạy khi người dùng khác truy cập trang. | Người dùng nhập dữ liệu đặc biệt vào form đăng nhập khiến hệ thống thực hiện truy vấn SQL ngoài ý muốn. |
| Cách phòng chống | Sử dụng CSRF Token, cấu hình SameSite Cookie, kiểm tra Origin/Referer và xác thực lại với thao tác quan trọng. | Lọc và mã hóa dữ liệu đầu vào, sử dụng Content Security Policy (CSP), tránh hiển thị trực tiếp dữ liệu chưa kiểm tra. | Sử dụng Prepared Statement, Parameterized Query, kiểm soát dữ liệu đầu vào và phân quyền database hợp lý. |
| Mức độ ảnh hưởng | Cao, đặc biệt với hệ thống có thao tác liên quan đến tài khoản, giao dịch hoặc quyền quản trị. | Cao, có thể ảnh hưởng đến nhiều người dùng nếu lỗ hổng tồn tại trên website phổ biến. | Rất cao, vì có thể ảnh hưởng trực tiếp đến dữ liệu cốt lõi của hệ thống. |
Các vụ tấn công CSRF kinh điển trong lịch sử
Trong lịch sử phát triển của Internet, CSRF đã từng được khai thác trong nhiều sự cố bảo mật lớn, ảnh hưởng đến hàng triệu người dùng và các nền tảng phổ biến. Những vụ tấn công này cho thấy chỉ một thiếu sót nhỏ trong cơ chế xác thực request cũng có thể tạo ra rủi ro nghiêm trọng cho hệ thống. Dưới đây là một số vụ việc tiêu biểu giúp minh họa rõ hơn về cách CSRF hoạt động và tầm quan trọng của việc triển khai các biện pháp phòng chống.
1. Netflix (2006)
Năm 2006, nền tảng xem phim trực tuyến Netflix từng được phát hiện tồn tại các vấn đề liên quan đến CSRF, cho phép kẻ tấn công lợi dụng phiên đăng nhập của người dùng để thực hiện một số hành động mà không cần sự cho phép trực tiếp. Lỗ hổng này xuất phát từ hệ thống chưa kiểm tra đầy đủ tính hợp lệ của các yêu cầu được gửi từ trình duyệt. Thông qua kỹ thuật CSRF, kẻ tấn công có thể tạo ra các liên kết hoặc trang web chứa yêu cầu giả mạo. Khi người dùng đang đăng nhập truy cập nội dung này, trình duyệt có thể tự động gửi yêu cầu kèm thông tin xác thực đến Netflix, khiến hệ thống hiểu nhầm đó là thao tác hợp lệ từ chính người dùng.
Sự cố này trở thành một ví dụ điển hình về nguy cơ của dựa hoàn toàn vào cookie phiên đăng nhập mà thiếu các cơ chế xác minh bổ sung. Sau vụ việc, ngành công nghiệp bảo mật chú trọng hơn đến việc áp dụng CSRF Token, kiểm tra nguồn gốc request và các biện pháp bảo vệ phiên người dùng.

2. YouTube (2008)
Năm 2008, nền tảng chia sẻ video YouTube từng bị phát hiện có lỗ hổng liên quan đến CSRF trong một số chức năng quản lý tài khoản. Lỗ hổng này cho phép kẻ tấn công tạo các yêu cầu giả mạo nhằm thực hiện một số thao tác thay mặt người dùng đã đăng nhập. Điểm đáng chú ý trong trường hợp này là cuộc tấn công không cần chiếm đoạt trực tiếp tài khoản mà lợi dụng quyền truy cập sẵn có của nạn nhân. Khi người dùng truy cập một trang web chứa mã độc trong lúc vẫn duy trì phiên đăng nhập YouTube, các yêu cầu không mong muốn có thể được gửi đến hệ thống.
Vụ việc cho thấy những nền tảng có lượng người dùng lớn luôn là mục tiêu hấp dẫn của các cuộc tấn công web. Sau đó, các nền tảng trực tuyến ngày càng tăng cường áp dụng các cơ chế bảo vệ như xác thực request, kiểm soát cookie và cải thiện quy trình xử lý các thao tác quan trọng.
3. McAfee (2012)
Năm 2012, công ty bảo mật McAfee từng được nhắc đến trong các nghiên cứu bảo mật liên quan đến lỗ hổng CSRF trên một số sản phẩm và dịch vụ trực tuyến. Các nhà nghiên cứu bảo mật đã chỉ ra rằng một số chức năng quản trị nếu không được bảo vệ đúng cách có thể bị lợi dụng thông qua các yêu cầu giả mạo.
Trong môi trường quản trị hệ thống, CSRF đặc biệt nguy hiểm vì người dùng thường có quyền hạn cao hơn so với tài khoản thông thường. Nếu quản trị viên bị khai thác, kẻ tấn công có thể tác động đến cấu hình, dữ liệu hoặc các chức năng quan trọng của hệ thống.
Trường hợp của McAfee là lời cảnh báo về việc không chỉ website dành cho người dùng cuối mà cả các hệ thống quản trị nội bộ cũng cần được bảo vệ trước CSRF. Triển khai nhiều lớp bảo mật như CSRF Token, giới hạn quyền truy cập và xác thực lại các thao tác nhạy cảm là yếu tố cần thiết để giảm thiểu rủi ro.

Qua bài viết của Phương Nam Vina, có thể thấy CSRF là một trong những lỗ hổng bảo mật web phổ biến, xảy ra khi kẻ tấn công lợi dụng phiên đăng nhập hợp lệ của người dùng để gửi các yêu cầu trái phép đến hệ thống. Mặc dù không trực tiếp đánh cắp dữ liệu xác thực, CSRF có thể gây ra những hậu quả nghiêm trọng như thay đổi thông tin tài khoản, thực hiện giao dịch ngoài ý muốn hoặc thao túng các chức năng quan trọng nếu website thiếu cơ chế bảo vệ phù hợp. Để phòng chống CSRF hiệu quả, doanh nghiệp và lập trình viên cần triển khai nhiều lớp bảo mật kết hợp và áp dụng cơ chế xác thực bổ sung cho các thao tác nhạy cảm. Bên cạnh đó, tuân thủ nguyên tắc thiết kế API an toàn, sử dụng framework có hỗ trợ chống CSRF và kiểm tra bảo mật định kỳ cũng đóng vai trò quan trọng trong việc giảm thiểu rủi ro.
Tham khảo thêm:
Ransomware là gì? Tất tần tật về mối đe dọa mã độc tống tiền
Trojan là gì? Dấu hiệu nhận biết và cách ngăn chặn virus Trojan
Sập web là gì? Nguyên nhân và cách khắc phục trang web bị sập
