Is createTextNode completely safe from HTML injection & XSS?
我正在使用单页Web应用程序。我正在通过直接创建DOM节点进行渲染。特别是,通过使用document.createTextNode("user data")创建文本节点,将所有用户提供的数据添加到页面。
这种方法是否避免了HTML注入,跨站点脚本(XSS)和用户可能做的所有其他邪恶事情的可能性?
它会创建一个纯文本节点,所以可以,就它而言。
通过使用不安全的方法来获取XSS问题是可能的,尽管该方法是从输入到createTextNode的任何通道获取数据的。
例如以下内容将是不安全的:
1
| document.createTextNode('<?php echo $_GET['xss']; ?>'); |
a€|但是危险来自PHP echo,而不是JavaScript createTextNode。
- 我对PHP不熟悉。该示例是否允许用户从其他地方请求数据并将其作为文本插入页面?
-
PHP从URL的查询字符串(即外部数据)中获取输入,并将其放入输出中而不进行转义。
-
但是无论它是什么,它仍将以纯文本形式输出,对吗?因此,除了显示一些文本之外,您无法使浏览器执行任何操作?
-
PHP在将页面的文本发送到客户端之前先对其进行构建。攻击者可以向PHP脚本提供类似'); alert('you just got xssed!的值,然后该脚本将在页面上构建有故障的脚本,然后客户端将运行该脚本,而不知道脚本在离开服务器之前已被更改。如果您不使用服务器端语言,则不会有问题。
-
知道了感谢您的澄清。在我的特定情况下,所有数据都作为JSON对象发送到客户端,然后呈现出来,所以我认为这不是问题。但这是一个牢记的好例子。
-
@Quentin,我有一个相同的问题,因此从您的回答来看,使用JS时可以安全地使用createTextNode(),因为我假设它会接受任何输入,将其存储为txt,而浏览器不会显示它解释它。那是对的吗 ??
-
我不明白这个例子。 document.createTextNode()是否在客户端/浏览器端运行,而php是否在服务器端运行,因此这不是问题吗?我猜您可以运行JavaScript服务器端,构建DOM,然后将其全部输出到文件中,然后运行文件的内容,从而在其中执行任何PHP代码,但是我不认为这是服务器端JS的方式正常工作...