2

在 JavaScript 中,如果我们过滤掉所有“小于”(“<”)字符然后将结果显示为 HTML,是否有任何已知的字符串会导致恶作剧?

var str = GetDangerousString().toString();
var secure = str.replace(/</g, '');

$('#safe').html(secure); // or
document.getElementById('safe').innerHTML = secure;

这个问题特别解决了清理 ID 的问题。我正在寻找一个通用的 HTML 字符串。理想的答案是可以注入代码或其他潜在危险元素的字符串的最简单工作示例。

4

1 回答 1

0

当然,这还不够……您需要对嵌入页面中的任何 HTML 进行 HTML 编码,以供最终用户编辑。否则,您需要对其进行消毒。

您可以在Owasp 网站上找到更多信息

编辑:针对您的评论,我不是 100% 确定。如果您不小心,听起来在某些情况下双重编码会让您受益。

https://www.owasp.org/index.php/Double_Encoding

例如,该页面中的这个字符串应该演示一个隐藏“<”字符的漏洞:

%253Cscript%253Ealert('XSS')%253C%252Fscript%253E

此外,字符“<”可以在 HTML 中以多种不同方式编码,如下表所示:

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Character_escape_sequences

所以对我来说,这是要小心的事情——事实上可能存在难以理解的可利用案例,但可能会让你敞开心扉。

但回到你原来的问题 - 你能给我一个呈现为不包含“<”字符的 HTML 的 HTML 示例吗?我试图了解您希望用户能够在“id”中使用的 HTML。

此外,如果您的网站很小,如果您愿意重写部分内容(特别是如何在页面中使用 javascript),那么您可以考虑使用内容安全策略来保护您的用户免受 XSS 攻击。这适用于大多数现代浏览器,如果您采取此步骤,它将保护您的许多用户免受 XSS 攻击。

于 2015-12-25T01:34:41.100 回答