Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中的字符串文本之间使用破折号_Javascript_Xss_Hyphen - Fatal编程技术网

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

在javascript中的字符串文本之间使用破折号,javascript,xss,hyphen,Javascript,Xss,Hyphen,我刚刚注意到,可以通过在javascript中的字符串文本之间使用破折号进行XSS攻击: 即: var foo='bar'-警报(1)-'baz'; //这将显示警报 我的问题是,js解释器在那里做什么使用那样的破折号是什么意思? 我认为这只是一个算术运算器 -----更新----- 抱歉,我没有解释xss攻击的真实上下文: 我同意,警报(1)看起来不是很有害。但实际上这是一个真实的例子,我用 . 主持人正在用它来烦我,但我建议将其视为一个假阳性漏洞 无论如何,我使用了一个querystrin

我刚刚注意到,可以通过在javascript中的字符串文本之间使用破折号进行XSS攻击:

即:

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:没问题。如果你觉得我的答案可以接受,你能“检查”它是否被接受。谢谢