CSRF là gì? Hiểu rõ cách thức hoạt động và cách phòng chống tấn công CSRF

Blog / Tin công nghệ 17/06/2025
dinh-nghia-csrf-la-gi
Phụ lục

Bạn có thể vô tình bị mất tài khoản chỉ bằng cách... truy cập vào một đường link? Nghe có vẻ khó tin, nhưng đó chính là bản chất của CSRF. CSRF là gì, cách hacker lợi dụng người dùng hợp pháp ra sao, và làm thế nào để phát hiện và ngăn chặn? Tất cả sẽ được giải thích rõ trong bài viết này.

CSRF là gì?

CSRF (Cross-Site Request Forgery) là một loại lỗ hổng bảo mật web nguy hiểm, cho phép kẻ tấn công thực hiện các hành động trái phép thay mặt cho người dùng đã xác thực trên một website. Bản chất của lỗ hổng này là lợi dụng niềm tin của website đối với trình duyệt của người dùng. Khi bạn đã đăng nhập vào một trang web và được xác thực thông qua cookie, kẻ tấn công có thể lợi dụng cookie này để thực hiện các hành động mà bạn không hề hay biết.

Điểm đáng chú ý là CSRF không đánh cắp dữ liệu trực tiếp, mà thay vào đó, nó lừa người dùng thực hiện các hành động mà họ không có ý định làm. Trong nhiều trường hợp, nạn nhân thậm chí không biết mình đã bị tấn công cho đến khi quá muộn.

CSRF là gì? Theo định nghĩa, CSRF (hay còn gọi là XSRF) là một kỹ thuật tấn công mạng, trong đó kẻ tấn công lừa người dùng thực hiện các hành động không mong muốn trên một ứng dụng web mà người dùng đã xác thực.

Để hiểu đơn giản hơn, hãy tưởng tượng bạn đang đăng nhập vào tài khoản ngân hàng trực tuyến của mình. Sau đó, bạn nhận được một email với một liên kết hấp dẫn và bạn nhấp vào nó. Liên kết này thực chất là một trang web độc hại đã được thiết kế để tự động gửi một yêu cầu chuyển tiền từ tài khoản của bạn đến tài khoản của kẻ tấn công. Vì bạn đã đăng nhập vào tài khoản ngân hàng và vẫn còn phiên làm việc hợp lệ, ngân hàng sẽ coi yêu cầu này là hợp pháp và thực hiện giao dịch.

   CSRF (Cross-Site Request Forgery) là một loại lỗ hổng bảo mật web nguy hiểm

CSRF (Cross-Site Request Forgery) là một loại lỗ hổng bảo mật web nguy hiểm

CSRF hoạt động như thế nào?

CSRF hoạt động bằng cách khai thác cơ chế xác thực của các ứng dụng web. Dưới đây là các bước cơ bản trong một cuộc tấn công CSRF:

  1. Bước 1: Người dùng đăng nhập vào một trang web (ví dụ: ngân hàng trực tuyến) và nhận được cookie xác thực.
  2. Bước 2: Người dùng vẫn đăng nhập và cookie xác thực vẫn còn hiệu lực.
  3. Bước 3: Kẻ tấn công lừa người dùng truy cập vào một website độc hại (thông qua email lừa đảo, tin nhắn, hoặc quảng cáo).
  4. Bước 4: Website độc hại chứa mã HTML/JavaScript tự động gửi một request đến trang web mà người dùng đã đăng nhập.
  5. Bước 5: Trình duyệt của người dùng tự động gửi cookie xác thực cùng với request này.
  6. Bước 6: Trang web tin tưởng request vì nó đi kèm với cookie xác thực hợp lệ và thực hiện hành động (như chuyển tiền, đổi mật khẩu...).

Cơ chế tấn công này đặc biệt nguy hiểm vì nó lợi dụng chính session hợp pháp của người dùng. Máy chủ web không thể phân biệt được request giả mạo với request hợp pháp vì cả hai đều chứa thông tin xác thực giống nhau.

Bạn đọc tham khảo thêm: 

SVG là gì? Cách dùng SVG hiệu quả trong thiết kế web

Tìm hiểu Postman là gì? Cách dùng Postman để test API

Mức độ nguy hiểm của CSRF

Tấn công CSRF có thể gây ra những hậu quả nghiêm trọng, đặc biệt khi nó nhắm vào các trang web quan trọng như ngân hàng, mạng xã hội, hoặc các hệ thống quản trị. Mức độ nguy hiểm của CSRF phụ thuộc vào quyền hạn của người dùng bị tấn công và chức năng của trang web mục tiêu.

Những hậu quả nghiêm trọng mà tấn công CSRF có thể gây ra bao gồm:

  • Đổi mật khẩu tài khoản người dùng: Kẻ tấn công có thể lừa người dùng vô tình thay đổi mật khẩu của họ thành mật khẩu do kẻ tấn công kiểm soát, từ đó chiếm quyền kiểm soát tài khoản.
  • Chuyển tiền từ tài khoản ngân hàng: Với các trang web ngân hàng hoặc thanh toán trực tuyến, kẻ tấn công có thể khiến người dùng thực hiện các giao dịch tài chính trái phép, chuyển tiền đến tài khoản của kẻ tấn công.
  • Xóa thông tin tài khoản: CSRF có thể được sử dụng để xóa dữ liệu quan trọng của người dùng, gây mất dữ liệu hoặc làm gián đoạn dịch vụ.
  • Đăng bài sai lệch trong các hệ thống mạng xã hội: Kẻ tấn công có thể đăng nội dung không phù hợp hoặc lừa đảo dưới danh nghĩa của nạn nhân, gây tổn hại đến danh tiếng cá nhân hoặc thương hiệu.

Ví dụ điển hình về tấn công CSRF là vụ việc xảy ra vào năm 2008, khi một lỗ hổng CSRF trong router của hãng Linksys và D-Link cho phép kẻ tấn công thay đổi cài đặt DNS của router, chuyển hướng người dùng đến các trang web giả mạo. Hàng nghìn router đã bị tấn công, và người dùng bị chuyển hướng đến các trang web lừa đảo khi họ cố gắng truy cập các trang web ngân hàng hoặc thương mại điện tử.

Tấn công CSRF có thể gây ra những hậu quả nghiêm trọng, đặc biệt khi nó nhắm vào các trang web quan trọng

Tấn công CSRF có thể gây ra những hậu quả nghiêm trọng, đặc biệt khi nó nhắm vào các trang web quan trọng

Dấu hiệu nhận biết website dễ bị tấn công CSRF

Việc phát hiện sớm các dấu hiệu cho thấy một website có nguy cơ cao bị tấn công CSRF là vô cùng quan trọng, đặc biệt đối với lập trình viên và quản trị hệ thống. Dưới đây là hai dấu hiệu phổ biến cần lưu ý:

Thiếu CSRF Token trong các form hoặc request quan trọng

Một trong những chỉ dấu rõ ràng nhất của một website dễ bị CSRF là không sử dụng CSRF token trong các biểu mẫu gửi dữ liệu (form) hoặc các request nhạy cảm.

CSRF token là một chuỗi giá trị ngẫu nhiên, duy nhất cho mỗi phiên người dùng. Token này cần được gửi kèm trong mỗi request và được máy chủ kiểm tra để xác minh tính hợp lệ của yêu cầu.

Ví dụ minh họa: Nếu kiểm tra mã HTML của một form mà không thấy có trường ẩn chứa CSRF token, rất có thể trang web đang thiếu lớp bảo vệ quan trọng này:

html

<form action="/transfer" method="POST">

    <input type="hidden" name="csrf_token" value="a1b2c3d4e5f6g7h8i9j0">

    <input type="text" name="recipient" placeholder="Người nhận">

    <input type="number" name="amount" placeholder="Số tiền">

    <button type="submit">Chuyển tiền</button>

</form>

Nếu đoạn mã như trên không có dòng chứa csrf_token, thì website đó đang mở cửa cho tấn công CSRF.

Cho phép gửi POST mà không kiểm tra nguồn gốc

Một dấu hiệu nguy hiểm khác là website không kiểm tra header Referer hoặc Origin khi nhận các request dạng POST. Điều này tạo cơ hội để các website độc hại gửi yêu cầu giả mạo từ bên ngoài.

Tình huống minh họa:
Giả sử một ngân hàng cho phép chuyển tiền qua API như sau:

http

POST /api/transfer HTTP/1.1

Host: bank.example.com

Cookie: session=abc123

Content-Type: application/x-www-form-urlencoded

to_account=9876543210&amount=1000

Nếu hệ thống chỉ xác minh session cookie mà không kiểm tra nguồn request (Referer/Origin), hacker có thể tạo một trang giả mạo tự động gửi form như sau:

<html>

  <body onload="document.forms[0].submit()">

    <form action="https://bank.example.com/api/transfer" method="POST">

      <input type="hidden" name="to_account" value="attackers-account">

      <input type="hidden" name="amount" value="10000">

    </form>

  </body>

</html>

Khi người dùng đã đăng nhập và vô tình truy cập vào trang này, form sẽ tự động gửi đi, kèm theo session cookie. Giao dịch chuyển tiền sẽ được thực hiện mà không cần xác nhận thêm, vì hệ thống không kiểm tra nguồn gốc yêu cầu.

Cách phòng chống CSRF hiệu quả

Để bảo vệ website khỏi các cuộc tấn công CSRF, có nhiều biện pháp phòng chống hiệu quả. Dưới đây là những phương pháp chính mà các nhà phát triển nên áp dụng:

 Sử dụng CSRF Token

CSRF Token là biện pháp phổ biến và hiệu quả nhất để ngăn chặn tấn công CSRF. Đây là một chuỗi ngẫu nhiên, duy nhất được tạo ra cho mỗi phiên làm việc của người dùng.

Cách triển khai CSRF Token:

  1. Tạo token: Khi người dùng bắt đầu phiên làm việc, máy chủ tạo ra một token ngẫu nhiên và lưu trữ nó trong session của người dùng.

  2. Nhúng token vào form: Token được nhúng vào tất cả các form trên trang web dưới dạng trường ẩn.
  3. Xác thực token: Khi nhận được request, máy chủ so sánh token được gửi đi với token được lưu trong session của người dùng.
  4. Từ chối request không hợp lệ: Nếu token không khớp hoặc không tồn tại, request sẽ bị từ chối.

Kiểm tra Referer và Origin header

Kiểm tra Referer và Origin header là một biện pháp bảo vệ bổ sung, giúp xác định nguồn gốc của request.

Referer header chứa URL của trang mà từ đó request được tạo ra. Origin header, mặt khác, chỉ chứa phần scheme, host và port của URL nguồn. Bằng cách kiểm tra các header này, máy chủ có thể đảm bảo request đến từ domain đáng tin cậy.

Tuy nhiên, cần lưu ý rằng phương pháp này không phải là giải pháp hoàn hảo vì Referer header có thể bị chặn hoặc giả mạo trong một số trường hợp.

Thuộc tính SameSite cho cookie là một biện pháp phòng chống CSRF mạnh mẽ được hỗ trợ bởi các trình duyệt hiện đại. Nó giới hạn cách cookie được gửi trong các request cross-site.

Có ba giá trị cho thuộc tính SameSite:

  • Strict: Cookie chỉ được gửi trong request same-site (cùng trang). Đây là mức bảo vệ cao nhất nhưng có thể ảnh hưởng đến trải nghiệm người dùng.
  • Lax: Cookie được gửi trong request same-site và trong request top-level navigation (như nhấp vào liên kết). Đây là giá trị mặc định của Chrome từ phiên bản 80.
  • None: Cookie được gửi trong tất cả các request, bao gồm cả cross-site. Khi sử dụng None, cookie phải được đặt với thuộc tính Secure (chỉ gửi qua HTTPS).

Thuộc tính SameSite cho cookie là một biện pháp phòng chống CSRF mạnh mẽ được hỗ trợ bởi các trình duyệt hiện đại

Thuộc tính SameSite cho cookie là một biện pháp phòng chống CSRF mạnh mẽ được hỗ trợ bởi các trình duyệt hiện đại

Một số công cụ hỗ trợ phòng chống CSRF

Có nhiều framework và thư viện cung cấp tính năng tích hợp để phòng chống CSRF:

  • OWASP CSRFGuard: Một thư viện Java cung cấp bảo vệ CSRF toàn diện cho ứng dụng web Java.
  • Django CSRF middleware: Framework Django tích hợp sẵn middleware bảo vệ CSRF, tự động thêm token vào các form và xác thực token khi nhận request.
  • Spring Security CSRF Protection: Cung cấp bảo vệ CSRF toàn diện cho các ứng dụng Spring, tự động tạo và xác thực token.
  • Laravel CSRF Protection: Framework PHP Laravel tích hợp sẵn bảo vệ CSRF, yêu cầu token trong tất cả các form POST, PUT, DELETE.
  • Express.js csrf middleware: Package npm csurf cung cấp middleware bảo vệ CSRF cho ứng dụng Express.js.

Kết luận

CSRF là gì? Đó là một lỗ hổng bảo mật nguy hiểm có thể khiến người dùng vô tình thực hiện các hành động không mong muốn trên các website mà họ đã xác thực. Bằng cách hiểu rõ cơ chế hoạt động của CSRF và áp dụng các biện pháp phòng chống như sử dụng CSRF token, kiểm tra Referer và Origin header, áp dụng SameSite Cookie, nhà phát triển có thể bảo vệ ứng dụng web của mình khỏi loại tấn công này một cách hiệu quả.

Devwork

Devwork là Nền tảng TUYỂN DỤNG IT CẤP TỐC với mô hình kết nối Nhà tuyển dụng với mạng lưới hơn 30.000 headhunter tuyển dụng ở khắp mọi nơi.Với hơn 1800 doanh nghiệp IT tin dùng Devwork để :

  • Tối ưu chi phí
  • Tiết kiệm thời gian
  • Tăng tốc tuyển dụng tối đa
  • Đăng ký ngay Devwork trong hôm nay để tuyển dụng những tài năng ưu tú nhất.

    Tag Cloud:

    Tác giả: Lưu Quang Linh

    Link chia sẻ

    Bình luận

    Việc làm tại Devwork

    khám phá các cơ hội việc làm tốt nhất tại Devwork Xem thêm

    Bài viết liên quan

    Danh sách bài viết liên quan có thể bạn sẽ thích Xem thêm
    luong-gross-la-gi

    Lương gross là gì? Cách quy đổi lương gross sang net dễ hiểu nhất

    07:48 12/12/2025

    Khi phỏng vấn hoặc đọc hợp đồng lao động, lương gross là cụm từ xuất hiện gần như 100%. Nhưng lương gross là gì mà lại quan trọng đến vậy? Nếu bạn đang bối rối chưa biết lương gross là gì và lương net là gì thì bài viết này Devwork sẽ giúp bạn hiểu tường tận từ khái niệm, cách tính cho đến cách quy đổi đơn giản nhất....

    Cách đặt mật khẩu máy tính đơn giản, bảo mật tuyệt đối 2026

    07:34 12/12/2025

    Chiếc máy tính, dù là PC hay laptop không chỉ là công cụ làm việc mà còn là "ngân hàng" lưu trữ vô số dữ liệu quan trọng: tài liệu cá nhân, thông tin ngân hàng, hình ảnh riêng tư... Nếu một ngày, những thông tin này rơi vào tay kẻ xấu, hậu quả sẽ thế nào? Chỉ với vài bước đơn giản, bạn có thể bảo vệ máy tính an toàn tuyệt đối bằng cách đặt mật khẩu máy tính. Bài viết này Devwork sẽ hướng dẫn chi tiết từ A-Z, phù hợp cho cả người dùng laptop và PC, giúp bạn tự làm được ngay lần đầu tiên.

    cach-dat-mat-khau-may-tinh

    Intern là gì? Toàn bộ những điều bạn cần biết về vị trí Intern

    09:39 02/12/2025

    Với sự gia tăng mạnh mẽ của nhu cầu tuyển dụng thực tập sinh tại các doanh nghiệp, khái niệm intern và internship ngày càng trở nên quen thuộc, đặc biệt với sinh viên năm cuối, người mới ra trường. Tuy nhiên, không ít bạn trẻ vẫn còn băn khoăn intern là gì, làm intern là làm gì, hay công việc intern có gì khác với fresher. Trong bài viết này, Devwork.vn sẽ giúp bạn hiểu rõ hơn về vị trí intern, đồng thời chia sẻ những cơ hội thực tập hấp dẫn dành cho người mới bắt đầu.

    intern-la-gi

    Case study là gì? Phương pháp phân tích case study hiệu quả

    04:07 25/11/2025

    Case study không phải cụm từ xa lạ trong marketing, kinh doanh hay học tập. Nhưng làm sao để tiếp cận và giải case study hiệu quả thì không phải ai cũng biết và làm được. Chính vì vậy, trong bài viết hôm nay, cùng Devwork đi tìm hiểu chi tiết về case study là gì, khám phá bí mật đằng sau các case study thành công, từ đó giúp bạn có cái nhìn toàn diện nhất để áp dụng vào công việc hoặc doanh nghiệp của mình.

    case-study-la-gi
    product-owner-la-gi

    Product Owner (PO) là gì? Giải mã vai trò quan trọng trong IT

    17:00 24/11/2025

    Trong những năm gần đây, đặc biệt là trong môi trường phát triển linh hoạt Agile và Scrum, vai trò của PO ngày càng trở nên quan trọng. PO là thuật ngữ quen thuộc trong lĩnh vực IT và quản lý dự án, nhưng không phải ai cũng hiểu rõ. Vậy PO là gì, PO là viết tắt của từ gì và vai trò thực sự của PO trong doanh nghiệp là gì? Bài viết này Devwork sẽ giải thích chi tiết, giúp bạn nắm bắt kiến thức cốt lõi và ứng dụng hiệu quả.

    singleton-pattern-la-gi

    Singleton Pattern là gì? Hướng dẫn chi tiết cách triển khai trong Java và Python

    04:00 24/11/2025

    Singleton pattern là gì và tại sao nó lại quan trọng trong phát triển phần mềm? Khi bạn cần đảm bảo rằng một class chỉ có duy nhất một thực thể trong suốt vòng đời ứng dụng, Singleton chính là giải pháp hoàn hảo. Bài viết này sẽ giúp bạn hiểu rõ về mẫu thiết kế này, cách triển khai và những tình huống nên (hoặc không nên) áp dụng nó.