3 loại tấn công Cross-Site Scripting (XSS)

Tác giả Starlink, T.Năm 05, 2025, 11:45:11 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

An ninh mạng là mối quan tâm lớn trực tuyến và tin tặc có thể sử dụng nhiều vectơ để nhắm mục tiêu vào trang web của bạn. Tìm hiểu về ba loại tấn công mạng tập lệnh chéo trang (XSS), cách chúng chồng chéo lên nhau và cách giảm thiểu lỗ hổng XSS trong các dự án của bạn.

Bảo mật là mối quan tâm lớn trong thế giới mạng. Nếu không có các biện pháp bảo mật phù hợp, các trang web dễ bị tội phạm mạng tấn công thông qua nhiều phương thức tấn công. Vi phạm bảo mật có thể gây ra:

    Cơ sở dữ liệu bị phá hủy hoặc hỏng
    Mất thông tin bí mật
    Trộm cắp sở hữu trí tuệ
    Chi phí phát sinh do vi phạm pháp luật và quy định

Để tránh những hậu quả này, bạn nên áp dụng các biện pháp tốt nhất và công cụ phù hợp.


Bài viết này khám phá một loại tấn công mạng phổ biến: tấn công cross-site scripting (XSS). Bạn sẽ tìm hiểu về các loại tấn công XSS khác nhau, cách chúng chồng chéo lên nhau và cách bạn có thể giảm thiểu lỗ hổng XSS trong các dự án của mình.

1. Khái niệm về cross-site scripting

Để thực hiện một cuộc tấn công XSS, tin tặc chèn một tập lệnh độc hại vào một trang web. Tùy thuộc vào loại tấn công XSS, tập lệnh này sau đó được truyền đến nạn nhân hoặc trang web. Nạn nhân truy cập trang web hoặc cố gắng lấy một số dữ liệu từ máy chủ web, khởi chạy tập lệnh độc hại. Tập lệnh thường đưa vào phần mềm độc hại đánh cắp dữ liệu nhạy cảm từ máy chủ web hoặc trình duyệt của nạn nhân hoặc để thay đổi nội dung của trang web.

Có nhiều cách mà tin tặc có thể khai thác lỗ hổng trang web, cũng như nhiều chiến lược để chống lại chúng. Nếu không nhanh chóng tìm ra và sửa chữa, lỗ hổng XSS có thể dẫn đến các cuộc tấn công gây thiệt hại nghiêm trọng.

2. Các loại tấn công XSS

Theo Dự án bảo mật ứng dụng web mở (OWASP), các cuộc tấn công XSS thuộc một trong ba loại sau: XSS phản chiếu, XSS lưu trữ và XSS mô hình đối tượng tài liệu (DOM). Các loại này được trình bày chi tiết bên dưới.

2.1. Tấn công cross-site scripting phản ánh (không liên tục)

Một cuộc tấn công XSS phản xạ xảy ra khi tin tặc gửi một tập lệnh độc hại đến một ứng dụng web dễ bị tấn công, sau đó máy chủ trả về trong phản hồi HTTP. Trình duyệt của nạn nhân thực thi tập lệnh độc hại như một phần của phản hồi HTTP, xâm phạm người dùng hợp pháp và gửi thông tin riêng tư trở lại tin tặc.

Các cuộc tấn công XSS phản chiếu thường nhắm vào các thông báo lỗi hoặc trang kết quả của công cụ tìm kiếm, vì rất dễ gửi email độc hại có liên kết mà nhiều người dùng sẽ nhấp vào. Khi người dùng nhấp vào liên kết, máy chủ sẽ nhận được yêu cầu chứa tập lệnh độc hại và vì nó không được lưu trữ nên máy chủ sẽ phản hồi bằng cách gửi lại mã cho người dùng. Khi dữ liệu đầu vào của người dùng không được xác thực và khử trùng đầy đủ hoặc khi dữ liệu bị sao chép không an toàn từ yêu cầu, sẽ có nguy cơ xảy ra lỗ hổng XSS phản chiếu.

Tuyến phòng thủ đầu tiên chống lại các cuộc tấn công XSS là lọc nội dung và xác minh thông tin đầu vào của người dùng. Bạn có thể sử dụng danh sách an toàn và danh sách chặn của nhà cung cấp tập lệnh để từ chối các mẫu dữ liệu rủi ro.

Ngoài ra, bạn có thể triển khai Chính sách bảo mật nội dung (CSP) nghiêm ngặt để giúp bạn xác định nguồn gốc của các tập lệnh nội tuyến, giảm nguy cơ bị tấn công XSS phản chiếu. Một CSP mạnh mẽ cho phép bạn kiểm soát các tập lệnh và vị trí trang web nơi chúng có thể được tải và chạy.

2.2. Tấn công cross-site scripting được lưu trữ (liên tục)

Trong một cuộc tấn công XSS được lưu trữ, một tập lệnh độc hại lưu dữ liệu đầu vào của người dùng vào máy chủ mục tiêu. Không giống như một cuộc tấn công XSS phản chiếu, được thực hiện trên máy chủ, một cuộc tấn công XSS được lưu trữ được thực hiện trên trình duyệt của người dùng. Sau đó, kẻ tấn công sử dụng các ứng dụng HTML5 hiện đại, thường sử dụng cơ sở dữ liệu HTML, để lưu trữ vĩnh viễn các tập lệnh có hại trên trình duyệt.

Trong một cuộc tấn công Stored XSS, tập lệnh được lưu và thực thi trên máy chủ mỗi khi người dùng truy cập trang web bị ảnh hưởng. Kẻ tấn công có thể dễ dàng nhắm mục tiêu vào một số lượng lớn nạn nhân và kết quả là dai dẳng. Các cuộc tấn công Stored XSS cũng có thể xảy ra khi người dùng chưa được đào tạo cố gắng trích xuất dữ liệu từ phần mềm mà không thực hiện bất kỳ biện pháp phòng ngừa vệ sinh hoặc xác thực nào.

Các cuộc tấn công Stored XSS có mục đích phản ánh một tập lệnh độc hại tới người dùng, do đó cách dễ nhất để ngăn chặn chúng là khử trùng dữ liệu người dùng và xử lý dữ liệu đầu vào một cách cẩn thận—và cách tốt nhất để ngăn chặn chúng là sử dụng ràng buộc tham số phù hợp.

Bạn có thể khử trùng dữ liệu bằng hệ thống mẫu tự động thoát hoặc mã hóa HTML. Bạn nên mã hóa dữ liệu dùng để xuất ra để ngăn máy chủ diễn giải dữ liệu đó thành nội dung đang hoạt động. Điều này có nghĩa là ứng dụng sẽ xử lý các ký tự đặc biệt trong dữ liệu đã lưu dưới dạng nội dung thẻ HTML, thay vì HTML thuần túy.

Ràng buộc tham số dữ liệu (data) thay đổi tùy theo vector, nhưng bạn luôn có thể truyền các biến dưới dạng các giá trị bổ sung bên ngoài chức năng bình thường của hàm. Bạn cũng có thể sử dụng các tiêu đề phản hồi thích hợp để ngăn chặn các cuộc tấn công, thường chỉ bằng cách thêm một vài dòng mã.

Một kỹ thuật khác để ngăn chặn các cuộc tấn công XSS xảy ra theo thời gian thực là sử dụng bảo mật động chủ động tìm kiếm các nỗ lực khai thác. Bằng cách chặn các mẫu đã biết, bạn có thể ngăn chặn kẻ tấn công khai thác các lỗ hổng hiện có.

Cuối cùng, bạn có thể sử dụng Tường lửa ứng dụng web (WAF) để phát hiện và giảm thiểu tấn công XSS theo thời gian thực.

2.3. Tấn công mã lệnh chéo trang web Mô hình đối tượng tài liệu (DOM)

Giao diện DOM cho phép xử lý và thao tác nội dung trang web bằng cách đọc và sửa đổi các tài liệu HTML và XML. Các cuộc tấn công XSS dựa trên DOM đưa ra những thay đổi độc hại vào ngữ cảnh DOM của trình duyệt nạn nhân, khiến mã phía máy khách được thực thi theo những cách không mong muốn.

Các cuộc tấn công XSS dựa trên DOM, không giống như các cuộc tấn công XSS phản ánh và lưu trữ, không lưu trữ tập lệnh độc hại hoặc gửi nó đến máy chủ. Trong cuộc tấn công này, trình duyệt của nạn nhân là lỗ hổng duy nhất. Vì chúng khó hiểu hơn các loại khác, nên các lỗ hổng dựa trên DOM không phổ biến, tinh vi và khó khắc phục. Hơn nữa, các trình quét lỗ hổng tự động và tường lửa ứng dụng web không thể dễ dàng xác định chúng.

Bạn có thể sử dụng các kỹ thuật tương tự để ngăn chặn cuộc tấn công này như hai kỹ thuật kia, nhưng bạn phải hết sức cẩn thận để khử trùng mã phía máy khách. Hai giải pháp hiệu quả là ngăn các nguồn do người dùng kiểm soát thay đổi các hàm JavaScript có khả năng gây nguy hiểm (được gọi là sink) hoặc chỉ cho phép nội dung đáng tin cậy bằng cách sử dụng danh sách an toàn. Với các biện pháp phòng ngừa này, các chuỗi có thể gây nguy hiểm cho DOM sẽ không được gửi đến sink. Bạn cũng có thể khử trùng dữ liệu bằng chức năng trình duyệt tích hợp, giảm nguy cơ xảy ra các sự cố liên quan đến thay đổi trình phân tích cú pháp.

Một biện pháp phòng thủ mới chống lại loại tấn công này là sử dụng các loại đáng tin cậy. Đây là cơ chế bảo mật của trình duyệt đảm bảo rằng tất cả các phần rủi ro của DOM chỉ có thể được sử dụng bởi dữ liệu đã vượt qua chính sách được xác định trước. Nó ngăn chặn các chuỗi tùy ý được chuyển đến các bồn chứa có khả năng gây nguy hiểm, giúp trình duyệt phân biệt giữa mã và dữ liệu—loại bỏ nguồn lỗ hổng chính.

2.4. XSS phía máy chủ so với XSS phía máy khách

Các cuộc tấn công XSS được phân loại thành XSS máy chủ hoặc XSS máy khách. Các chương trình phía máy khách chạy trên thiết bị hoặc trình duyệt của máy khách và xử lý giao diện người dùng và bất kỳ quá trình xử lý nào khác diễn ra trên thiết bị của máy khách. Các chương trình phía máy chủ hoạt động trên máy chủ và tạo nội dung của trang web.

XSS phía máy chủ xảy ra khi tất cả mã phía máy chủ đều dễ bị tấn công và trình duyệt sẽ hiển thị phản hồi và chạy bất kỳ tập lệnh hợp lệ nào được nhúng trong đó. Mặt khác, XSS phía máy khách thực thi trên thiết bị của người dùng và sửa đổi trang web sau khi trang web đã tải.

Tấn công XSS có thể xảy ra ở bất kỳ đâu có HTML. Cho dù được lưu trữ, phản ánh hay dựa trên DOM, tất cả các cuộc tấn công XSS đều có cùng tác dụng: Kẻ tấn công giành được quyền kiểm soát hoàn toàn phiên web.

Các cuộc tấn công XSS này cũng có thể chồng chéo lên nhau và một trang web có thể dễ bị cả ba loại tấn công cùng lúc. Trong trường hợp của một trang web duy nhất hoặc một ứng dụng ngoại tuyến, cả ba loại tấn công đều có thể tự xuất hiện trực tiếp trên trình duyệt. Tuy nhiên, hành vi của chúng có thể khác nhau khi dữ liệu được lưu trên máy chủ so với khi dữ liệu được phản ánh từ máy chủ.

OWASP liệt kê XSS là một trong những rủi ro bảo mật ứng dụng web hàng đầu do tính phổ biến, tác động sâu rộng và nhiều phương pháp thực hiện tấn công khác nhau.

Kẻ tấn công sử dụng nhiều chiến lược để đánh lừa người dùng. Mỗi loại tấn công XSS khai thác một điểm yếu riêng biệt, nhưng chúng không loại trừ lẫn nhau. Trong một số trường hợp, một cuộc tấn công XSS dựa trên DOM được kết hợp với một cuộc tấn công XSS phản ánh hoặc lưu trữ.

Mặc dù các kỹ thuật ngăn chặn các cuộc tấn công XSS khác nhau là tương tự nhau, nhưng một chiến lược duy nhất sẽ không loại bỏ hoàn toàn các rủi ro. Bạn nên sử dụng các chiến thuật phòng thủ phù hợp cho mọi loại tấn công XSS.