我的网站遭受过多次XSS攻击.以下HTML片段是攻击者注入的XSS向量:
<a href="mailto:">
<a href=\"http://www.google.com onmouseover=alert(/hacked/); \" target=\"_blank\">
<img src="http://www.google.com onmouseover=alert(/hacked/);" alt="" /> </a></a>
Run Code Online (Sandbox Code Playgroud)
看起来脚本不应该执行,但使用IE9的开发工具,我能够看到浏览器将HTML转换为以下内容:
<a href="mailto:"/>
<a onmouseover="alert(/hacked/);" href="\"http://www.google.com" target="\"_blank\"" \?="">
</a/>
Run Code Online (Sandbox Code Playgroud)
经过一些测试,结果证明"使"onmouseover"属性"生活",但我不知道为什么.有谁知道为什么这个向量成功?
因此,总结一下注释:在引号前粘贴一个字符,将引号转换为属性值的一部分,而不是标记值的开头和结尾.这也适用:
href=a"http://www.google.com onmouseover=alert(/hacked/); \"
Run Code Online (Sandbox Code Playgroud)
HTML允许无引号属性,因此它成为具有给定值的两个属性.