我刚刚注意到您可以通过在 javascript 中的字符串文字之间使用破折号来进行 XSS 攻击:
IE:
var foo = 'bar'-alert(1)-'baz';
//this will display the alert
我的问题是,那里的 js 解释器在做什么?使用这样的破折号是什么意思?我认为这只是一个算术运算符。
- - - 更新 - - -
抱歉,我没有解释 xss 攻击的真实背景:
我同意, alert(1) 看起来不是很有害。但实际上是一个真实的例子,我从使用Burp Suite进行的安全扫描中得到 。托管商正在用它来烦我,但我建议将其视为误报漏洞。
无论如何,我正在使用redirección的查询字符串参数:
http://mysite.com/foo.php?returnto=bar.php
它也是用javascript制作的:
echo '<script>alert("bye!");window.location="'.escapeXSS($_REQUEST['returnto']).'";</script>';
攻击者可能会在那里插入一个匿名函数,在重定向之前执行:
http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-'
结果将是:
<script>alert("bye!");windows.location='bar.php'-function(){/* do something */}()-'';</script>
确实,执行函数(取决于 php 转义函数的质量)。