跨站点脚本问题

时间:2013-09-23 14:37:56

标签: javascript html security scripting xss

我想用我们的代码阻止XSS,问题是它可能需要JS以及html转义并且可能有点棘手。

以下示例代码与我们的代码

类似
 <script>
  var CURRENT_VALUE = '<img src=1 onerror=alert(1)>';
  document.getElementById("valueBox").innerHTML = CURRENT_VALUE;
 </script>

让我们假设动态插入CURRENT_VALUE。那么在这种情况下我应该怎么做,我知道一个简单的HTML编码可能不起作用,因为攻击者可能会传递unicode转义值,当JS解析器清除它时,它可能会被转储到文档中。

那么正确的方法是什么,

我应该首先执行JS转义并且在document.getElementbyID之前执行html转义吗?这会怎么样?

假设CURRENT_VALUE是十六进制编码并且包含/ x027img ......等等

1 个答案:

答案 0 :(得分:1)

现在我我明白你的目标 - 将内容作为TextNode插入进行格式化:

var CURRENT_VALUE = '<img src=1 onerror=alert(1)>';
var node = document.createTextNode(CURRENT_VALUE);
var valueBox = document.getElementById("valueBox");
valueBox.appendChild(node);

console.log(valueBox.innerHTML);

如果您查看控制台输出,则插入的HTML现在是:

&lt;img src=1 onerror=alert(1)&gt;