【发布时间】:2021-04-07 17:34:55
【问题描述】:
输出是:
<img src="http://example.com/[input]"
oncontextmenu="openUrl('http://example.com/[input]')">
其中 [input] 是用户输入,通过此函数进行清理:
a => {
a = String(a);
a = this.replaceAll(a, "&", "&");
a = this.replaceAll(a, '"', """);
a = this.replaceAll(a, "'", "'");
a = this.replaceAll(a, "<", "<");
return a = this.replaceAll(a, ">", ">")
}
换句话说,我们似乎无法突破或使用任何形式的引号?
在这些限制下是否可能发生 XSS 攻击?或者是否可以将用户重定向到除 example.com 之外的任何域?或者实际上,从 evil.com 加载图像(或向其发出请求)?谢谢!
【问题讨论】:
-
我不这么认为。但顺便说一句,你的整个
replaceAll()代码本身不能替换为a = a.encodeHTML();吗? -
取决于重用值的位置,但使用的 sanitizer 不会删除像
\u00这样的编码字符。使用 DevTools 用新内容覆盖内联侦听器的整个参数也很容易。 -
@ScottMarcus JS 中没有
.encodeHTML()方法?
标签: javascript html security browser xss