大家都知道,普遍的防御XSS攻击的方法是在后台对以下字符进行转义:、’、”,但是经过本人的研究发现,在一些特殊场景下,即使对以上字符进行了转义,还是可以执行XSS攻击的。
首先看一个JS的例子:
Default
var s = "u003cu003e";
alert(s);
1
2
3
4
vars="u003cu003e";
alert(s);
运行这段代码,结果显示如下:
看到这么熟悉的尖括号,大家会不会有一些兴奋的感觉呢?JS代码中并没有出现尖括号,可是运行时却输出了尖括号!!!这意味着:可以通过u003c和u003e来代替。可是该如何利用这个特性来构造XSS攻击呢?继续看一个例子:
Default
test
var s = "u003cimg src=1 οnerrοr=alert(/xss/)u003e";
document.getElementById('s').innerHTML = s;
1
2
3
4
5
6
7
test