在javascript中的字符串文本之间使用破折号
我刚刚注意到,可以通过在javascript中的字符串文本之间使用破折号进行XSS攻击: 即:在javascript中的字符串文本之间使用破折号,javascript,xss,hyphen,Javascript,Xss,Hyphen,我刚刚注意到,可以通过在javascript中的字符串文本之间使用破折号进行XSS攻击: 即: var foo='bar'-警报(1)-'baz'; //这将显示警报 我的问题是,js解释器在那里做什么使用那样的破折号是什么意思? 我认为这只是一个算术运算器 -----更新----- 抱歉,我没有解释xss攻击的真实上下文: 我同意,警报(1)看起来不是很有害。但实际上这是一个真实的例子,我用 . 主持人正在用它来烦我,但我建议将其视为一个假阳性漏洞 无论如何,我使用了一个querystrin
var foo='bar'-警报(1)-'baz';
//这将显示警报
我的问题是,js解释器在那里做什么使用那样的破折号是什么意思?
我认为这只是一个算术运算器
-----更新-----
抱歉,我没有解释xss攻击的真实上下文:
我同意,警报(1)看起来不是很有害。但实际上这是一个真实的例子,我用
. 主持人正在用它来烦我,但我建议将其视为一个假阳性漏洞
无论如何,我使用了一个querystring参数来表示redirección:
http://mysite.com/foo.php?returnto=bar.php
它也是用javascript制作的:
echo'警报(“再见!”);window.location=“”.escapeXSS($_请求['returnto'])。”;
攻击者可以在此处插入匿名函数,以便在重定向之前执行以下操作:
http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-'
结果将是:
警报(“再见!”);windows.location='bar.php'-function(){/*do something*/}()-'';
实际上,这会导致函数被删除(取决于php转义函数的质量)。执行alert()
不是因为它在字符串中有破折号,而是因为您在bar
之后关闭了字符串,从中“减去”返回的alert()
并从中减去字符串baz
。因此将始终调用函数alert()
。如果不希望发生这种情况,请不要关闭并重新打开字符串:
var foo = 'bar-alert(1)-baz';
事实上,我不知道它如何导致XSS攻击。传递给代码的任何字符串实际上都是与上述字符串类似的字符串。执行警报()
并不是因为字符串中有破折号,而是因为您在栏之后关闭了字符串,从中“减去”返回的警报()
,并从中减去字符串baz
。因此将始终调用函数alert()
。如果不希望发生这种情况,请不要关闭并重新打开字符串:
var foo = 'bar-alert(1)-baz';
事实上,我不知道它如何导致XSS攻击。传递给代码的任何字符串实际上都是类似于上面的字符串。解释器只是简单地转换每个子表达式,以尝试形成一个数学表达式
而不是:
var foo=1-2-1代码>
您有一个表达式,其结果是:
var foo=NaN-NaN-NaN代码>
这就是为什么foo
是NaN
解释器只是简单地将每个子表达式转换成一个数学表达式
而不是:
var foo=1-2-1代码>
您有一个表达式,其结果是:
var foo=NaN-NaN-NaN代码>
这就是为什么foo
是NaN
你能演示一下这是如何导致XSS攻击的吗?我还不确定。是的,我已经更新了我的问题。你能演示一下这会如何导致XSS攻击吗?我还不确定。是的,我已经更新了我的问题,就像XSS攻击一样!我总是说,当心奶奶。@dami:没问题。如果你觉得我的答案可以接受,你能“检查”它是否被接受。谢谢。哦,就像XSS攻击一样!我总是说,当心奶奶。@dami:没问题。如果你觉得我的答案可以接受,你能“检查”它是否被接受。谢谢