使用字符串文字之间的破折号在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避开功能的质量)。
答
的alert()
不执行,因为它在字符串中划线,而是因为你bar
后关闭的字符串,“减去”的alert()
从它的回报,从它的字符串baz
减去。所以函数alert()
将始终被调用。如果你不希望它发生,只是不关闭并重新打开字符串:
var foo = 'bar-alert(1)-baz';
其实,我看不出它如何可能导致XSS攻击。传递给你的代码的任何字符串实际上都是上面那个字符串。
你能演示如何这可能会导致在XSS攻击?我还不确定。 – 2011-05-03 21:45:07
是的,我已经更新了我的问题 – dami 2011-05-04 01:02:45