我刚刚注意到你可以在javascript中使用字符串文字之间的破折号进行XSS攻击:
即:
var foo = 'bar'-alert(1)-'baz';
//this will display the alert
我的问题是,那里的js解释器在做什么? 这是什么意思使用破折号? 我认为它只是一个aritmetic操作员。
-----更新-----
抱歉,我没有解释xss攻击的真实背景:
我同意,警报(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转义功能的质量)。
答案 0 :(得分:5)
解释器只是转换每个子表达式以尝试形成数学表达式。
而不是:
var foo = 1 - 2 - 1;
你有一个表达式最终成为:
var foo = NaN - NaN - NaN;
这就是foo
为NaN
答案 1 :(得分:0)
alert()
的执行不是因为它在字符串中有破折号,而是因为你在bar
之后关闭了字符串,从中减去了alert()
的返回并从中删除它是字符串baz
。因此,将始终调用函数alert()
。如果您不希望它发生,请不要关闭并重新打开字符串:
var foo = 'bar-alert(1)-baz';
实际上,我看不出它会如何导致XSS攻击。传递给你代码的任何字符串实际上都是一个像上面那样的字符串。