我想用我们的代码阻止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 ......等等
答案 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现在是:
<img src=1 onerror=alert(1)>