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