Lỗ hổng tấn công XSS (Cross-Site Scripting): Nguy cơ và phòng ngừa

9:25 28/08/2023

Trong thế giới kỹ thuật mạng, lỗ hổng tấn công XSS (Cross-Site Scripting) là một trong những nguy cơ phổ biến và đáng lo ngại nhất. XSS cho phép kẻ tấn công chèn mã độc (malicious code) vào các trang web và ứng dụng, từ đó có thể tấn công người dùng cuối trực tiếp hoặc đánh cắp thông tin nhạy cảm. 

XSS là gì?

Lỗ hổng tấn công XSS xảy ra khi ứng dụng web không kiểm tra và xử lý đúng cách dữ liệu đầu vào từ người dùng. Kẻ tấn công tận dụng điểm yếu này để chèn mã độc (thường là JavaScript) vào trang web hoặc ứng dụng. Khi người dùng truy cập vào trang web bị tấn công, mã độc sẽ được thực thi trong trình duyệt của họ.

(Ảnh minh họa)

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

Có ba loại tấn công XSS phổ biến:

  • Stored XSS (XSS lưu trữ): 

Mã độc được lưu trữ và hiển thị vĩnh viễn trên trang web, thường trong phần bình luận hoặc hồ sơ người dùng. Khi người dùng truy cập vào trang web, mã độc sẽ được thực thi.

Ví dụ:

Bình luận của người dùng: <script>alert(‘XSS Attack!’);</script>

Khi bình luận này được hiển thị trên trang web mà không có bất kỳ biện pháp phòng ngừa nào, mã độc <script>alert(‘XSS Attack!’);</script> sẽ được thực thi trong trình duyệt của người dùng khi họ truy cập vào trang web, và một hộp thoại cảnh báo với nội dung “XSS Attack!” sẽ xuất hiện.

Để phòng ngừa tấn công XSS như ví dụ trên, trang web cần kiểm tra và làm sạch dữ liệu đầu vào từ người dùng trước khi hiển thị lên trang. Sử dụng các biện pháp bảo mật như HTML escaping hoặc whitelist-based filtering để đảm bảo rằng dữ liệu người dùng không chứa mã độc hoặc các ký tự đặc biệt có thể gây ra lỗ hổng bảo mật.

  • Reflected XSS (XSS phản ánh):

Mã độc được chèn vào URL và gửi đến ứng dụng web. Ứng dụng web sẽ phản ánh (reflect) mã độc trở lại trong phản hồi. Khi người dùng truy cập vào URL chứa mã độc, mã độc sẽ được thực thi trong trình duyệt của họ.

Ví dụ:

URL tìm kiếm: http://example.com/search?q=<script>alert(‘XSS Attack!’);</script>

Trong ví dụ này, câu hỏi q trong URL chứa mã độc JavaScript alert(‘XSS Attack!’);. Nếu trang web không kiểm tra và xử lý đúng cách đầu vào từ URL truy vấn, khi người dùng truy cập vào đường link này, mã độc JavaScript sẽ được thực thi trong trình duyệt của họ và một hộp thoại cảnh báo với nội dung “XSS Attack!” sẽ xuất hiện.

Để phòng ngừa XSS như trong ví dụ trên, trang web cần mã hóa và làm sạch đầu vào từ URL truy vấn. Sử dụng cơ chế tạo mã độc an toàn như HTML escaping hoặc whitelist-based filtering để chắc chắn rằng chỉ các thẻ HTML, thuộc tính và giá trị an toàn được chấp nhận từ URL. Việc thực hiện các biện pháp bảo mật này sẽ giúp bảo vệ trang web của bạn khỏi các cuộc tấn công XSS từ xa.

  • DOM-based XSS (XSS dựa trên DOM): 

Tấn công này xảy ra khi mã độc ảnh hưởng trực tiếp đến cấu trúc DOM (Document Object Model) trong trình duyệt. Mã độc sẽ thay đổi cấu trúc DOM để thực thi các hành động độc hại.

Ví dụ:

URL thay đổi ngôn ngữ:

http://example.com/change-language?lang=<script>alert(‘XSS Attack!’);</script>

Trong ví dụ này, tham số lang trong URL chứa mã độc JavaScript alert(‘XSS Attack!’);. Nếu ứng dụng web không kiểm tra và xử lý đúng cách đầu vào từ URL truy vấn, khi người dùng truy cập vào đường dẫn này và thực hiện thay đổi ngôn ngữ, mã độc JavaScript sẽ được thực thi trong trình duyệt của họ và hộp thoại cảnh báo với nội dung “XSS Attack!” sẽ xuất hiện.

Để phòng ngừa XSS như trong ví dụ trên, ứng dụng web cần kiểm tra và làm sạch đầu vào từ URL truy vấn và bất kỳ đầu vào nào được sử dụng để thay đổi cấu trúc DOM. Sử dụng cơ chế tạo mã độc an toàn như HTML escaping hoặc whitelist-based filtering để đảm bảo rằng chỉ các thẻ HTML, thuộc tính và giá trị an toàn được chấp nhận trong việc thay đổi cấu trúc DOM. Bằng cách này, bạn có thể bảo vệ ứng dụng web khỏi các cuộc tấn công XSS từ xa.

Demo tấn công XSS

Dưới đây là một ví dụ đơn giản về tấn công XSS:

Với URL sau:

http://example.com/vulnerable.php?comment=<script>alert(‘XSS Attack!’);</script>

Khi người dùng truy cập vào URL này, mã độc <script>alert(‘XSS Attack!’);</script> sẽ được thực thi trong trình duyệt của họ và hiển thị thông báo “XSS Attack!”.

Cách phòng ngừa tấn công XSS

Để phòng ngừa tấn công XSS, hãy áp dụng các biện pháp bảo mật sau:

  • Sử dụng phương pháp kiểm tra và xử lý dữ liệu đầu vào:

Hãy đảm bảo rằng tất cả dữ liệu đầu vào từ người dùng được kiểm tra và xử lý đúng cách trước khi hiển thị trên trang web. Sử dụng các bộ lọc và thư viện bảo mật để loại bỏ hoặc mã hóa các ký tự đặc biệt.

Ví dụ: 

Giả sử trang web có tính năng cho phép người dùng thêm bình luận vào một bài viết. Nếu trang web không kiểm tra và xử lý đúng cách dữ liệu đầu vào, một kẻ tấn công có thể chèn mã độc vào bình luận.

Bình luận của người dùng: <script>alert(‘XSS Attack!’);</script>

Giải pháp phòng ngừa: Trước khi lưu trữ bình luận, ứng dụng web nên kiểm tra và làm sạch dữ liệu đầu vào từ người dùng. Sử dụng các bộ lọc như HTML escaping để chuyển đổi các ký tự đặc biệt như <, >, &, ” thành các phiên bản HTML an toàn (&lt;, &gt;, &amp;, &quot;). Khi hiển thị bình luận lên trang, trình duyệt sẽ hiểu đó chỉ là dữ liệu văn bản, không thực thi mã độc.

  • Sử dụng cơ chế tạo mã độc thân thiện:

Ví dụ: 

Trang web cho phép người dùng tạo một tên người dùng mới khi đăng ký tài khoản.

Tên người dùng mới: <script>malicious_code_here</script>

Giải pháp phòng ngừa: Trong quá trình tạo tên người dùng mới, trang web nên sử dụng whitelist-based filtering để chỉ chấp nhận các ký tự và từ hợp lệ. Ví dụ, chỉ cho phép ký tự từ A-Z, a-z, số từ 0-9, và một số ký tự đặc biệt an toàn như dấu gạch dưới (_) hay dấu chấm (.), nhưng không cho phép các ký tự đặc biệt như <, >, “, v.v. Điều này đảm bảo rằng không có mã độc nào được chèn vào tên người dùng.

  • Thiết lập header HTTP hợp lệ:

Ví dụ: 

Thiết lập Content Security Policy (CSP) để ngăn chặn việc thực thi mã độc từ các nguồn không tin cậy.

Giải pháp phòng ngừa: Trang web nên thêm header CSP vào trong HTTP response để chỉ định những nguồn nào được phép chạy mã độc. Ví dụ, có thể cấu hình CSP như sau:

Content-Security-Policy: default-src ‘self’; script-src ‘self’ ‘trusted-cdn.com’;

Trong đó, ‘self’ cho phép chạy mã độc từ cùng một trang web, ‘trusted-cdn.com’ cho phép chạy mã độc từ một trang web tin cậy. Bất kỳ mã độc từ nguồn khác sẽ bị ngăn chặn và không được thực thi.

  • Đào tạo và nâng cao nhận thức bảo mật:

Giải pháp phòng ngừa: Đào tạo nhân viên, đặc biệt là nhà phát triển và quản trị viên hệ thống, về các nguy cơ bảo mật, cách tấn công XSS xảy ra và cách phòng ngừa. Nhân viên nên biết cách sử dụng các công cụ bảo mật và thư viện để đảm bảo mã nguồn của trang web được an toàn và không chứa lỗ hổng bảo mật.

Bằng cách thực hiện các biện pháp phòng ngừa như trên, trang web và ứng dụng của bạn sẽ có khả năng chống lại tấn công XSS hiệu quả và bảo vệ người dùng và dữ liệu trước các nguy cơ an ninh ứng dụng web.

Bộ môn CNTT
Trường Cao đẳng FPT Polytechnic cơ sở Hà Nội

Cùng chuyên mục

Đăng Kí học Fpoly 2024

  • Max. file size: 512 MB.
  • Max. file size: 512 MB.
  • Max. file size: 512 MB.