在javascript中字符串之间使用破折号
using dashes between string literals in javascript
我刚刚注意到,您可以通过在javascript中的字符串字面量之间使用破破号来进行XSS攻击:
ie:var foo = 'bar'-alert(1)-'baz';
//this will display the alert
我的问题是,js解释器在做什么?使用破折号是什么意思?我以为它只是一个算术运算符。
----- UPDATE -----
对不起,我没有解释xss攻击的真正上下文:
我同意,警报(1)看起来不是很有害。这是一个真实的例子,是我用Burp Suite做的安全扫描。主机是困扰我,但我建议把它作为一个假阳性漏洞。
无论如何,我使用querystring参数redirección:
http://mysite.com/foo.php?returnto=bar.php
也是用javascript制作的:
echo '<script>alert("bye!");window.location="'.escapeXSS($_REQUEST['returnto']).'";</script>';
攻击者可能会在那里插入一个匿名函数,在重定向之前执行:
http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-'
的结果将是:
<script>alert("bye!");windows.location='bar.php'-function(){/* do something */}()-'';</script>
使函数执行(取决于PHP转义函数的质量)。
解释器只是对每个子表达式进行强制转换,试图形成一个数学表达式。
代替:
var foo = 1 - 2 - 1;
你有一个表达式,最终是:
var foo = NaN - NaN - NaN;
这就是为什么foo
是NaN
执行alert()
不是因为它在字符串中有破折号,而是因为您在bar
之后关闭了字符串,"减去"了alert()
的返回并从中减去了字符串baz
。因此,函数alert()
将始终被调用。如果您不希望它发生,只需不关闭并重新打开字符串:
var foo = 'bar-alert(1)-baz';
实际上,我不知道它如何导致XSS攻击。任何传递给代码的字符串实际上都是像上面那样的字符串。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 获取最后一个破折号和最后一个点之间的字符串
- 在Javascript中删除字符串之间的破折号并大写字符串
- 在javascript中字符串之间使用破折号