Ở bài viết này mình sẽ giới thiệu về một lỗ hổng bảo mật trên web phổ biến sau "SQL Injection" đó là lỗ hổng XSS. Chúng ta sẽ đi vào phần khái niệm và cách mà nó ảnh hưởng đến các trang web hiện nay.
XSS là gì?
Cross-Site Scripting (gọi tắt là XSS) là một loại tấn công ứng dụng web, nơi máy client nhập đoạn "script" độc hại đưa vào đầu ra của ứng dụng web và sau đó được thực thi bởi trình duyệt của người dùng. Đã có một khoảng thời gian cách đây không lâu khi XSS được coi là một loại vấn đề bảo mật rủi ro thấp, bởi vì khi so sánh với các lổ hỗng khai thác phía máy chủ, nó có vẻ tương đối khá yếu. Ngoài ra nó còn có thể được sử dụng để tiếp quản trình duyệt của người dùng theo nhiều cách khác .
|
Một cuộc tấn công XSS |
Tấn công XSS
Ở đây mình có 1 trang web có sẵn các mức độ của lổ hỗng XSS, mình sẽ thử nghiệm mức độ 1 và 2. Các bạn cũng có thể vào thử tại trang web:
https://xss-game.appspot.com/
|
Trang chủ của XSS Game |
Level 1
Ở mức độ đầu tiên thì các bạn thấy giao diện của trang tìm kiếm, do đó cách viết một "script" để hiển thị thông báo là sử dụng lệnh "alert" để hiện thị hộp thoại thông báo với cú pháp như sau:
alert('Hello');
|
Level 1 |
Level 2
Chúng ta sẽ đến với level 2, thì ở đây giao diện là một trang đăng bình luận của một bài báo. Chúng ta có thể xem gợi ý khi nhấn vào "show" để hiển thị gợi ý. Họ đã gợi ý cho chúng ta sử dụng thẻ "img" và sự kiện "onerror" để khai thác XSS. Sự kiện onerror được kích hoạt nếu xảy ra lỗi trong khi tải tệp bên ngoài (ví dụ: tài liệu hoặc hình ảnh). Do đó, mình sẽ thông qua thẻ "img" của trang báo và chèn vào đoạn "script" như sau:
onerror=alert('Hello');
|
Level 2 |
Các mức độ sau thì các bạn có thể tự mình khám phá và giải nó thông qua các gợi ý của tác giả.
Cách ngăn chặn XSS
Hầu như tất cả các kịch bản lệnh phía máy client đều thông qua các ký tự sau:
<> () {} [] "'; / \. Có nhiều cách khác nhau để quản lý việc cấm các ký tự này, nhưng nó quá phụ thuộc vào ngữ cảnh để đưa ra một câu trả lời một cách cụ thể để loại trừ các trường hợp xảy ra với các ký tự này. Câu trả lời ngắn nhất là, đảm bảo bạn chỉ nhận được các ký tự mà bạn mong đợi khi người dùng nhập bất kỳ loại thông tin nào - hãy đảm bảo bạn không bao giờ hiển thị chuỗi do người dùng nhập mà không mã hóa chính xác. Còn một cách nữa là các bạn có thể ngăn chặn người dùng thực thị "javascript" thì điều đó sẽ dễ dàng hơn.
|
Google không thể bị tấn công với XSS |
Tóm tắt
Chúng ta đã được giới thiệu về lỗ hổng XSS và cách mà chúng ta khai thác nó thông qua các kiểu khai thác đơn giản. Hơn nữa, mình cũng có đưa ra các giải pháp để có thể chặn các cuộc tấn công XSS thông qua các chính sách thắt chặt việc nhập dữ liệu của người dùng. Cám ơn các bạn đã xem bài viết.