【发布时间】:2012-07-24 04:03:58
【问题描述】:
我正在开发一个单页 web 应用程序。我通过直接创建 DOM 节点来进行渲染。特别是,通过使用document.createTextNode("user data") 创建文本节点,将所有用户提供的数据添加到页面。
这种方法是否避免了任何可能的 HTML 注入、跨站脚本 (XSS) 以及用户可能做的所有其他邪恶事情?
【问题讨论】:
标签: javascript html security web xss
我正在开发一个单页 web 应用程序。我通过直接创建 DOM 节点来进行渲染。特别是,通过使用document.createTextNode("user data") 创建文本节点,将所有用户提供的数据添加到页面。
这种方法是否避免了任何可能的 HTML 注入、跨站脚本 (XSS) 以及用户可能做的所有其他邪恶事情?
【问题讨论】:
标签: javascript html security web xss
它创建一个纯文本节点,所以是的,就它而言。
虽然使用不安全的方法从输入到createTextNode 的任何通道获取数据,但可能会造成 XSS 问题。
例如以下将是不安全:
document.createTextNode('<?php echo $_GET['xss']; ?>');
...但危险来自 PHP echo,而不是 JavaScript createTextNode。
【讨论】:
'); alert('you just got xssed! 的值,然后在页面上构建一个故障脚本,客户端会运行它,而不知道脚本在离开服务器之前已被更改。如果您不使用服务器端语言,这不是问题。
createTextNode 也应该受到责备。跨度>
是的,它是 XSS 安全的,就像使用 someElement.innerText = "..." 一样。
(兄弟答案通过包含易受 XSS 攻击的 PHP sn-p 来增加混乱。)
【讨论】: