
Có thể bạn đã từng nghe về Cross-site scripting attack và sự nguy hiểm của nó đối với người dùng web. Nhưng bạn đã biết cơ chế hoạt động của nó, cũng như sự khác biệt giữa các kiểu cross-site scripting attack, và cách để ngăn chặn loại tấn công này? Hãy cùng Z.com tìm hiểu tiếp!
Cross-site scripting attack là gì?
Cross-site scripting attack (còn gọi là XSS) là một hình thức lợi dụng lỗ hổng bảo mật web, trong đó kẻ tấn công có thể can thiệp vào tương tác giữa người dùng với các ứng dụng dính lỗ hổng. Đúng như tên gọi, nó cho phép kẻ tấn công “lách” qua những chính sách bảo mật được thiết kế để cô lập các website với nhau.
Thông qua cross-site scripting attack, kẻ tấn công có thể giả dạng làm người dùng nạn nhân, từ đó thực hiện bất kỳ hành động nào nằm trong quyền hạn của người dùng và truy xuất mọi dữ liệu của người dùng. Nếu người dùng nạn nhân nắm quyền truy xuất đặc biệt trong ứng dụng, kẻ tấn công có thể kiểm soát hoàn toàn các chức năng và dữ liệu cuẩ ứng dụng.
Cơ chế của cross-site scripting attack
Trong cross-site scripting attack, kẻ tấn công sẽ thao túng một website có lỗ hổng để gửi mã độc JavaScript đến người dùng. Khi mã độc này được thực thi trong trình duyệt của nạn nhân, kẻ tấn công có thể can thiệp vào tương tác giữa họ với ứng dụng.

Bạn có thể xác định liệu website có dính lỗ hổng XSS hay không bằng cách nhúng một payload khiến trình duyệt thực thi một số mã JavaScript tùy ý. Thông thường người ta sẽ sử dụng chức năng alert() cho mục đích này, bởi nó ngắn gọn, vô hại, và có thể nhận biết ngay khi nó được gọi thành công.
Tuy nhiên, nếu sử dụng trình duyệt Google Chrome, sẽ có một vấn đề nhỏ. Từ phiên bản 92 trở đi, các cross-origin iframe không còn gọi được chức năng alert() nữa. Bởi các iframe này thường bị lợi dụng để tiến hành những đợt cross-site scripting attack tinh vi, bạn sẽ cần chuyển sang sử dụng một payload PoC, và lời khuyên ở đây là gọi chức năng print().
Các loại cross-site scripting attack
Có 3 loại cross-site scripting attack chính bao gồm:
- Reflected XSS: mã độc đến từ yêu cầu HTTP hiện tại
- Stored XSS: mã độc đến từ cơ sở dữ liệu của website
- DOM-based XSS: lỗ hổng bảo mật tồn tại trong mã nguồn trên máy khách thay vì mã nguồn trên máy chủ.

Cross-site scripting attack có thể bị lợi dụng vào mục đích gì?
Kẻ tấn công thường lợi dụng cross-site scripting attack cho một số mục đích sau:
- Giả dạng người dùng nạn nhân
- Thực hiện bất kỳ hành động nào mà người dùng có thể thực hiện
- Đọc mọi dữ liệu người dùng được truy xuất
- Thu thập thông tin đăng nhập của người dùng
- Thực hiện thay đổi nội dung website
- Nhúng trojan vào website
Tác động thực sự của cross-site scripting attack tùy thuộc vào bản chất của ứng dụng, chức năng và dữ liệu bên trong, và tình trạng của người dùng bị tấn công. Ví dụ:
- Đối với các ứng dụng brochureware, trong đó mọi người dùng đều ẩn danh và mọi thông tin đều công khai, cross-site scripting attack hầu như không gây ảnh hưởng đáng kể.
- Đối với các ứng dụng lưu trữ dữ liệu nhạy cảm, như giao dịch ngân hàng, email, hay lịch sử khám chữ bệnh, tác động thường rất nghiêm trọng.
- Nếu người dùng bị tấn công nắm giữ quyền truy cập đặc biệt trong ứng dụng, thì tình hình càng tệ hơn, bởi kẻ tấn công lúc này nắm trọn quyền kiểm soát ứng dụng và truy xuất được mọi dữ liệu của mọi người dùng.
Tìm và kiểm thử lỗ hổng dẫn đến cross-site scripting attack
Đa số các lỗ hổng XSS có thể được phát hiện khá nhanh và chính xác bằng phần mềm quét lỗ hổng website của Burp Suite.
Để tự tay kiểm thử Reflected XSS và Stored XSS, bạn cần nhập vào một số thông tin đơn giản nhưng độc nhất (như một chuỗi chữ số ngắn) vào mọi entry point trong ứng dụng, sau đó xác định mọi vị trí mà thông tin đó được trả về trong các phản hồi HTTP, và kiểm thử từng vị trí riêng rẽ để xác định xem liệu kẻ tấn công có thể tạo ra một chuỗi thông tin phù hợp để thực thi mã độc JavaScript hay không. Với cách này, bạn có thể xác định được bối cảnh mà cross-site scripting attack xảy ra và chọn một payload phù hợp để tận dụng nó.
Kiểm thử DOM-based XSS xuất hiện từ các tham số URL cũng đi theo quy trình tương tự: đưa một số chuỗi thông tin đơn giản nhưng độc nhất vào tham số, sử dụng các công cụ nhà phát triển của trình duyệt để tìm DOM cho thông tin đã nhập, và kiểm thử từng vị trí để xác định liệu vị trí nào có thể bị lợi dụng.
Tuy nhiên, các loại DOM XSS khác lại khó phát hiện hơn. Để tìm lỗ hổng DOM-based trong các thông tin nhập vào mà không phải URL (như document.cookie) hoặc các sink không phải HTML (như setTimeout), thì việc tự kiểm tra mã JavaScript sẽ cực kỳ mất thời gian. Bạn sẽ cần đến phần mềm quét lỗ hổng website của Burp Suite, bởi nó có thể kết hợp phân tích JavaScript tĩnh và động để tự động hóa việc phát hiện lỗ hổng DOM-based.
Cách ngăn chặn cross-site scripting attack
Trong một số trường hợp, ngăn chặn cross-site scripting attack khá đơn giản, nhưng có thể phức tạp hơn tùy thuộc độ phức tạp của ứng dụng và cách nó xử lý dữ liệu người dùng.
Thông thường, để ngăn chặn hiệu quả cross-site scripting attack, bạn cần kết hợp nhiều giải pháp:
- Lọc thông tin đầu vào: tại vị trí tiếp nhận thông tin nhập liệu từ người dùng, cần lọc càng chặt chẽ càng tốt dựa trên việc tính toán thông tin có thể nhận, hoặc thông tin nhận vào là phù hợp.
- Mã hóa dữ liệu đầu ra: tại vị trí dữ liệu người dùng được xuất ra trong các phản hồi HTTP, mã hóa thông tin đầu ra để ngăn nó bị “bắt” trong quá trình di chuyển. Tùy thuộc bối cảnh xuất, bạn có thể phải áp dụng kết hợp mã hóa HTML, URL, JavaScript, và CSS.
- Sử dụng header phản hồi phù hợp: để ngăn XSS trong phản hồi HTTP nhưng không chứa bất kỳ mã HTML hay JavaScript nào, bạn có thể sử dụng các header Content-Type và X-Content-Type-Options để đảm bảo trình duyệt đọc các phản hồi đúng như ý bạn.
- Xây dựng chính sách bảo mật nội dung: là hàng rào cuối cùng, bạn có thể sử dụng CSP (Content Security Policy) nhằm giảm sự nguy hại của cross-site scripting attack trong trường hợp xảy ra.
Bài liên quan
- Từ A-Z về DNS 1.1.1.1, hướng dẫn cài đặt DNS 1.1.1.1 trên máy tính và điện thoại
- DNS là gì? Từ A-Z về DNS Google, DNS Server, DNS VNPT
- Flush DNS là gì? Cách xóa cache DNS trong Windows chi tiết nhất
- DNS Security là gì? Nên chọn DNS Security nào tốt nhất?
- Lỗi DNS_PROBE_FINISHED_NXDOMAIN là gì? Một số cách khắc phục nhanh, hiệu quả cao
- DDNS là gì? Các lợi ích mà DDNS mang lại bạn không nên bỏ lỡ


