Không làm điều này với cụm từ thông dụng. Hãy nhớ rằng, bạn không bảo vệ chống lại HTML hợp lệ; bạn đang bảo vệ chống lại DOM mà trình duyệt web tạo ra. Các trình duyệt có thể bị lừa để tạo ra DOM hợp lệ từ HTML không hợp lệ khá dễ dàng.Ví dụ, xem danh sách này obfuscated XSS attacks. Bạn đã chuẩn bị để điều chỉnh một regex để ngăn chặn cuộc tấn công thế giới thực này trên Yahoo and Hotmail trên IE6/7/8?
<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</BODY></HTML>
Cuộc tấn công này hoạt động trên IE6 như thế nào?
<TABLE BACKGROUND="javascript:alert('XSS')">
Làm thế nào về các cuộc tấn công không được liệt kê trên trang web này? Vấn đề với cách tiếp cận của Jeff là nó không phải là một danh sách trắng, như tuyên bố. Khi ai đó trên that page adeptly ghi chú:
Vấn đề với nó, là html phải sạch. Có những trường hợp trong đó bạn có thể chuyển vào html bị tấn công và sẽ không khớp với nó, trong trường hợp này, nó sẽ trả về chuỗi html bị tấn công vì nó sẽ không khớp với bất kỳ thứ gì để thay thế. Điều này không phải là danh sách trắng đầy đủ.
Tôi sẽ đề xuất công cụ được xây dựng theo mục đích như AntiSamy. Nó hoạt động bằng cách phân tích cú pháp HTML thực sự, và sau đó duyệt qua DOM và xóa bất kỳ thứ gì không có trong danh sách trắng có thể định cấu hình. Điểm khác biệt chính là khả năng xử lý HTML không đúng định dạng.
Phần tốt nhất là nó thực sự đơn vị kiểm tra cho tất cả các cuộc tấn công XSS trên trang web trên. Bên cạnh đó, những gì có thể dễ dàng hơn cuộc gọi API này:
public String toSafeHtml(String html) throws ScanException, PolicyException {
Policy policy = Policy.getInstance(POLICY_FILE);
AntiSamy antiSamy = new AntiSamy();
CleanResults cleanResults = antiSamy.scan(html, policy);
return cleanResults.getCleanHTML().trim();
}
Nguồn
2009-02-11 00:59:10
hơn những gì bạn cần? Câu trả lời có vẻ tốt với tôi. –