2012-07-25 67 views
10

我正在处理单个页面的webapp。我通过直接创建DOM节点来进行渲染。特别是,通过使用document.createTextNode("user data")创建文本节点,可以将所有用户提供的数据添加到页面中。是否从HTML注入和XSS完全安全的createTextNode?

这种方法避免了HTML注入,跨站点脚本(XSS)以及用户可能做的所有其他恶意事件的可能性吗?

回答

9

它创建一个纯文本节点,所以是,只要它走了。

虽然可以通过使用不安全的方法从输入到createTextNode的任何通道获取数据,但可能会创建XSS问题。

例如以下是不安全

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

...但其危险性是从PHP echo,而不是JavaScript的createTextNode

+0

我不熟悉PHP。那个例子是否允许用户从其他地方请求数据并将其作为文本插入到页面上? – 2012-07-25 16:53:04

+0

@breischl - PHP从URL的查询字符串(这是外部数据)获取输入,并将其放入输出而不会转义。 – Quentin 2012-07-25 16:54:02

+0

但是它仍然会以纯文本的形式输出,不管它在哪里,对吧?所以你不能让浏览器做任何事情,除了显示一些文本? – 2012-07-25 16:57:08