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

Phụ lục
dinh-nghia-csrf-la-gi

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
    graphql-la-gi

    GraphQL là gì? Cấu trúc cơ bản của 1 truy vấn GraphQL

    10:32 17/06/2025

    Bạn đang nghe nhiều người nhắc đến GraphQL nhưng vẫn chưa hiểu nó là gì và có thật sự đáng học không? Đừng lo! Trong bài viết này, chúng ta sẽ cùng giải mã GraphQL là gì từ cơ bản đến ứng dụng cũng như biết khi nào nên sử dụng GraphQL cho dự án của mình....

    Từ A đến Z về webhook là gì: Nguyên lý, lợi ích và webhook Discord

    17:00 16/06/2025

    Nếu bạn là người mới bắt đầu tìm hiểu về lập trình hay muốn tối ưu hệ thống thông báo, webhook chắc chắn là một khái niệm không thể bỏ qua. Bài viết này sẽ giải thích chi tiết webhook là gì, tại sao webhook lại trở thành xu hướng tích hợp hiện đại và đặc biệt là cách sử dụng webhook Discord trong vài bước đơn giản.

    webhook-la-gi

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

    08:26 17/06/2025

    Bạn từng nghe đến SVG nhưng chưa hiểu rõ nó dùng để làm gì? Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết về định dạng ảnh SVG là gì: từ khái niệm cơ bản, cách nhúng vào HTML/CSS, đến các ứng dụng thực tế trong thiết kế web, tất cả được trình bày dễ hiểu, có ví dụ minh họa cụ thể.

    khai-niem-svg-la-gi

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

    10:24 16/06/2025

    Bạn muốn test API nhưng không biết bắt đầu từ đâu? Bạn đang tìm một công cụ vừa đơn giản, vừa hiệu quả để thực hành? Hãy bắt đầu với Postman, phần mềm được hàng triệu developer trên toàn thế giới tin dùng. Bài viết này sẽ hướng dẫn bạn hiểu rõ Postman là gì và cách sử dụng nó để gửi request, xem response chỉ sau vài thao tác cơ bản.

    postman-la-gi
    rest-api-la-gi

    Rest API là gì? Những điều cần biết để thiết kết hiệu quả

    10:18 16/06/2025

    Trong thế giới công nghệ hiện đại, cụm từ "REST API" xuất hiện ngày càng nhiều. Nghe có vẻ phức tạp, nhưng thực chất, nó lại đóng vai trò quan trọng trong việc kết nối các ứng dụng và dịch vụ mà chúng ta sử dụng hàng ngày. Dù bạn là người nội trợ bận rộn, sinh viên năng động, dân văn phòng hay chủ doanh nghiệp, hiểu về REST API sẽ giúp bạn nắm bắt xu hướng công nghệ và tận dụng tối đa lợi ích mà nó mang lại.

    transition-la-gi

    Transition là gì? 3 giai đoạn trong 1 quy trình Transition

    10:13 16/06/2025

    Quy trình transition là yếu tố sống còn đối với thành công của các dự án IT lớn. Tại Devwork, chúng tôi thấu hiểu tầm quan trọng của quá trình chuyển giao này và tác động của nó đến hiệu suất vận hành của doanh nghiệp. Bài viết dưới đây sẽ giúp bạn hiểu rõ transition là gì và cách thực hiện hiệu quả.