我们知道XSS漏洞最常见的检测方式就是输入<script>alert(‘xss’)</script>来确认,大部分人在测试的时候就是直接使用类似<script>alert(‘xss’)</script>这样的输入,如果发现有弹出对话框就说明存在漏洞,如果没有对话框就认为不存在漏洞。那么,只使用<script>标签是否就足够了呢?
我们知道另外也有一些其他的方式比如<img src=’non-exist.jpg’ οnerrοr=”alert(‘xss’)”>等等,那么这些方式之间有没有什么区别呢?
看看下面两个例子,第一个使用的<script>alert(‘xss’)</script>:
<html>
<script>
function init()
{
document.getElementById("div1").innerHTML="<script>alert('aa')</script>";
}
</script>
<body οnlοad=init()>
<div id="div1"></div>
</body>
</html>
第二个使用的<img src=’non-exist.jpg’ οnerrοr=”alert(‘xss’)”>
<html>
<script>
function init()
{
document.getElementById("div1").innerHTML="<img src='aa.jpg' οnerrοr=\"alert('aa')\"/>";
}
</script>
<body οnlοad=init()>
<div id="div1"></div>
</body>
</html>
如果把这2个分别保存成HTML,但是发现第一个<script>alert(‘xss’)</script>不会执行,但是第二个例子是会执行的。想想看为什么?