2012-07-25 22 views
10

Tôi đang làm việc trên một trang web đơn. Tôi đang thực hiện kết xuất bằng cách trực tiếp tạo các nút DOM. Đặc biệt, tất cả dữ liệu do người dùng cung cấp được thêm vào trang bằng cách tạo các nút văn bản với document.createTextNode("user data").Có phải createTextNode hoàn toàn an toàn với HTML injection & XSS không?

Cách tiếp cận này có tránh được bất kỳ khả năng nào của HTML injection, cross scripting (XSS) và tất cả những điều xấu khác mà người dùng có thể làm không?

Trả lời

9

Nó tạo ra một nút văn bản thuần túy, vì vậy có, theo như nó đi.

Có thể tạo ra một vấn đề XSS bằng cách sử dụng một phương pháp không an toàn để lấy dữ liệu từ bất kỳ kênh nào mà nó đang được nhập vào vào createTextNode.

ví dụ: Sau đây sẽ là không an toàn:

document.createTextNode('<?php echo $_GET['xss']; ?>'); 

... nhưng nguy hiểm là từ PHP echo, không phải là hoạt Javascript createTextNode.

+0

Tôi không quen với PHP. Ví dụ đó có cho phép người dùng yêu cầu dữ liệu từ nơi khác và chèn nó vào dưới dạng văn bản trên trang không? –

+0

@breischl - PHP lấy đầu vào từ chuỗi truy vấn của URL (là dữ liệu ngoài) và thả nó vào đầu ra mà không cần thoát. – Quentin

+0

Nhưng nó vẫn sẽ được xuất ra dưới dạng văn bản thuần túy, bất kể nó nằm ở đâu, phải không? Vì vậy, bạn không thể làm cho trình duyệt làm bất cứ điều gì, ngoài việc hiển thị một số văn bản? –

Các vấn đề liên quan