摘自《白帽子讲Web安全》


<a href="javascript:alert(1);">test</a>
<IMG src='vbscript:msgbox("XSS")'>
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=">test</a>



python开发框架Django和web2py都选择在View层默认HtmlEncode所有变量,但仍可能出现XSS:

栗子:

<body>
<a href=# οnclick="alert('$var');">test</a>
</body>

如果用户输入:

$var = htmlencode("');alert('2");

对浏览器来说,htmlparser会优先于JavaScript Parser执行,所以解析过程是,被HtmlEncode的字符先被解码,然后执行JavaScript事件。

<body>
<a href=# οnclick="alert('');alert('2');">test</a>
</body>