从HTML注入和XSS中,createTextNode是否完全安全?

Bri*_*chl 13 html javascript security xss web

我正在开发单页webapp.我正在通过直接创建DOM节点来进行渲染.特别是,通过创建文本节点,将所有用户提供的数据添加到页面中document.createTextNode("user data").

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

Que*_*tin 10

它创建了一个纯文本节点,所以是的,就其而言.

可以通过使用不安全的方法从输入的任何通道获取数据来创建XSS问题createTextNode.

例如以下是不安全的:

document.createTextNode('<?php echo $_GET['xss']; ?>');
Run Code Online (Sandbox Code Playgroud)

...但危险来自PHP echo,而不是JavaScript createTextNode.

  • PHP在将页面文本发送到客户端之前构建它的文本.攻击者可以提供像'')这样的值; 警告('你刚刚得到了PHP!脚本,然后会在页面上构建一个故障脚本,客户端会运行它,不知道脚本在离开服务器之前已被更改过.如果你是不使用服务器端语言,这不是问题. (2认同)
  • 我不明白这个例子。document.createTextNode() 不是在客户端/浏览器端运行,而 php 不是在服务器端运行,因此这不是问题吗?我猜你可以运行 JavaScript 服务器端,构建 DOM,然后将其全部输出到一个文件,并运行文件的内容,从而执行其中的任何 PHP 代码,但我不认为服务器端 JS 通常是这样的作品... (2认同)
  • @still_dreaming_1 回复晚了抱歉。PHP 示例展示了 PHP 在后端生成 JavaScript,然后将 JS 片段发送到前端的情况。但这只会增加对原始问题的困惑,因为它演示了 *PHP 后端* 如何容易受到 XSS 攻击,但看起来“createTextNode”也应该受到指责。 (2认同)