我正在开发一个单页面Web应用程序。我通过直接创建DOM节点来进行渲染。具体来说,所有用户提供的数据都是通过创建文本节点document.createTextNode("user data")
添加到页面中的。
这种方法是否避免了HTML注入、跨站脚本攻击(XSS)以及用户可能做的所有其他恶意行为?
我正在开发一个单页面Web应用程序。我通过直接创建DOM节点来进行渲染。具体来说,所有用户提供的数据都是通过创建文本节点document.createTextNode("user data")
添加到页面中的。
这种方法是否避免了HTML注入、跨站脚本攻击(XSS)以及用户可能做的所有其他恶意行为?
它创建了一个纯文本节点,因此就这方面而言是可以的。
然而,如果使用不安全的方法从输入数据渠道获取数据来使用createTextNode
,就有可能创建一个XSS问题。
例如,以下方式是不安全的:
document.createTextNode('<?php echo $_GET['xss']; ?>');
... 但是危险来自于 PHP 的 echo
,而不是 JavaScript 的 createTextNode
。
是的,它是XSS安全的,就像使用someElement.innerText = "..."
一样。
(兄弟回答包含易受XSS攻击的PHP片段,增加了混淆。)
'); alert('you just got xssed!
这样的值,然后PHP将在页面上构建一个功能失常的脚本,而客户端并不知道该脚本在离开服务器之前被篡改了。如果您没有使用服务器端语言,则不会遇到这个问题。 - apsillerscreateTextNode
归咎于此。 - Cigarette Smoking Man