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

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

最佳答案

它会创建一个纯文本节点,所以可以,就它而言。

但是,通过使用不安全的方法从输入到createTextNode的任何通道中获取数据可能会产生XSS问题。

例如以下是不安全的:

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

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

10-04 13:46