在javascript中使用字符串文字之间的破折号

dam*_*ami 1 javascript xss hyphen

我刚刚注意到你可以在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转义功能的质量).

z5h*_*z5h 6

解释器只是转换每个子表达式以尝试形成数学表达式.

代替:

var foo = 1 - 2 - 1;

你有一个表达式最终成为:

var foo = NaN - NaN - NaN;

这就是为什么fooNaN