0

我想用我们的代码防止 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... 等等

4

1 回答 1

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;
于 2013-09-23T15:05:26.547 回答