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

问题描述:

我刚才注意到,您可以通过使用字符串常量之间划在JavaScript让XSS攻击:使用字符串文字之间的破折号在JavaScript

即:

var foo = 'bar'-alert(1)-'baz'; 
//this will display the alert 

我的问题是,什么做那里的js口译员? 这是什么意思使用类似破折号? 我认为它只是一个aritmetic操作符。

----- ----- UPDATE

对不起,我没有解释的XSS攻击的真实语境:

我同意,警告(1)不看非常有害。但实际上,我是通过使用Burp Suite 进行的安全扫描得到的。主机正在窃听我,但我建议将其作为误报漏洞。

无论如何,我使用的是查询字符串参数redirección

echo '<script>alert("bye!");window.location="'.escapeXSS($_REQUEST['returnto']).'";</script>'; 

攻击者可能会插入一个匿名函数:

http://mysite.com/foo.php?returnto=bar.php 

它也用JavaScript制作在那里,通过改变之前重定向:

http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-' 

的结果将是:

<script>alert("bye!");windows.location='bar.php'-function(){/* do something */}()-'';</script> 

,确实,得到excecuted功能(取决于PHP避开功能的质量)。

+2

你能演示如何这可能会导致在XSS攻击?我还不确定。 – 2011-05-03 21:45:07

+0

是的,我已经更新了我的问题 – dami 2011-05-04 01:02:45

解释器只是简单地铸造每个子表达式来试图形成一个数学表达式。

相反的:

var foo = 1 - 2 - 1;

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

var foo = NaN - NaN - NaN;

这就是为什么fooNaN

+0

Oeh犹如XSS攻击!谨防NaN,我总是说。 – Rudie 2011-05-03 22:04:10

+0

geez,我看到这是一个愚蠢的问题。谢谢! – dami 2011-05-04 00:22:29

+0

@dami:没问题。如果你发现我的答案可以接受,你可以“检查”它是否被接受。谢谢。 – z5h 2011-05-04 14:05:31

alert()不执行,因为它在字符串中划线,而是因为你bar后关闭的字符串,“减去”的alert()从它的回报,从它的字符串baz减去。所以函数alert()将始终被调用。如果你不希望它发生,只是不关闭并重新打开字符串:

var foo = 'bar-alert(1)-baz'; 

其实,我看不出它如何可能导致XSS攻击。传递给你的代码的任何字符串实际上都是上面那个字符串。