Có ai biết liệu một DOM Node
của loại Text
được đảm bảo không được hiểu là HTML của trình duyệt không?Nút Mô tả DOM có được đảm bảo để không được hiểu là HTML không?
Thêm chi tiết theo sau.
nền
Tôi đang xây dựng một hệ thống bình luận web đơn giản cho một người bạn, và tôi đã suy nghĩ về các cuộc tấn công XSS. Tôi không nghĩ rằng lọc hoặc thoát thẻ HTML là một giải pháp rất thanh lịch - nó quá dễ dàng để đến với một convolution mà sẽ trượt qua bộ lọc. Vấn đề cơ bản là tôi muốn đảm bảo rằng, đối với một số nội dung nhất định (tức là nội dung mà người dùng web không được xác thực ngẫu nhiên POST), trình duyệt không bao giờ cố gắng diễn giải hoặc chạy nội dung.
Một đồng bằng (văn bản) bắt đầu
Ý nghĩ đầu tiên đến với tâm trí là chỉ để sử dụng Content-Type: text/plain
, nhưng điều này có áp dụng cho toàn bộ một trang. Bạn có thể đặt một bản rõ IFRAME
ở giữa một trang, nhưng nó xấu xí và nó tạo ra các vấn đề tiêu điểm nếu người dùng nhấp vào khung.
innerText/textContent/JQuery
Nó chỉ ra rằng có một số trình duyệt cụ thể (innerText
trong IE, textContent
trong FF, Safari, vv) thuộc tính đó, khi thiết lập, được yêu cầu để tạo ra một duy nhất Text
nút.
JQuery cố gắng tránh sự khác biệt trong các thuộc tính trình duyệt cụ thể, bằng cách thực hiện một chức năng duy nhất text(val)
mà bỏ qua các thuộc tính trình duyệt cụ thể và đi trực tiếp đến document.createTextNode(text)
, trong đó, như bạn có thể đoán, tạo ra một nút Text
.
W3 DOM Text
Node
s
Vì vậy, tôi nghĩ rằng đây là gần với những gì tôi muốn, có vẻ good-- Text
nút không thể có con, và nó xuất hiện như họ không thể được hiểu là HTML. Nhưng tôi không chắc chắn 100% từ các tài liệu chính thức.
- Interface
Node
: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247 - Interface
Text
: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772 textContent
: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent
Phần từ textContent
là đặc biệt đáng khích lệ, bởi vì nó nói "về thiết, không phân tích được thực hiện một trong hai, chuỗi đầu vào được lấy làm nội dung thuần văn bản. " Nhưng điều này có cơ bản đối với tất cả các nút Text
hay chỉ các nút mà bạn đặt textContent
? Điều này có thể có vẻ giống như một lời ngớ ngẩn câm, nhưng nó có thể quan trọng bởi vì IE không hỗ trợ textContent
(xem ở trên).
Trở lại xung quanh cho câu hỏi ban đầu
bất cứ ai có thể xác nhận/từ chối rằng điều này sẽ làm việc? Tức là, trình duyệt tuân thủ DOM w3 sẽ không bao giờ diễn giải một nút Text
dưới dạng HTML, bất kể nội dung là gì? Tôi vô cùng biết ơn vì sự bất trắc này đã giải quyết một chút.
Cảm ơn bạn đã dành thời gian!
Tôi dựa hoang tưởng của tôi trên: http://stackoverflow.com/questions/53728/will-html-encoding-prevent-all-kinds-of-xss-attacks http: // blog. stackoverflow.com/2008/06/safe-html-and-xss/ – elliot42
@surprise_ sai. có nhiều kỹ thuật tiêm khác, từ các thủ thuật mã hóa, đến thuộc tính tiêm, JavaScript, CSS, v.v. – Zach