跨站点脚本问题

Cross Site Scripting Issue

本文关键字:问题 脚本 站点      更新时间:2023-09-26

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

现在我想我明白你要去哪里了 - 插入内容作为 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;