可以通过重写 Array 构造函数或敌对值不是 JavaScript 字符串转义来利用 JSON 响应。
让我们假设这两个向量都以正常方式处理。谷歌著名地通过在所有 JSON 前面加上以下内容来捕获 JSON 响应直接采购:
throw 1; < don't be evil' >
然后是 JSON 的其余部分。所以 Dr. Evil 不能,使用讨论过的那种漏洞 here .通过在他的网站上输入以下内容来获取您的 cookie(假设您已登录):
<script src="http://yourbank.com/accountStatus.json">
至于字符串转义规则,如果我们使用双引号,我们需要在每个反斜杠前面加上一个反斜杠,在每个反斜杠前面加上另一个反斜杠等。
但我的问题是,如果你正在做这一切呢?
Burp Suite (自动化安全工具)检测在 JSON 响应中以非 HTML 转义形式返回的嵌入式 XSS 尝试,并将其报告为 XSS 漏洞。我有一份报告说我的应用程序包含此类漏洞,但我不相信。我已经尝试过了,但我无法利用漏洞。
所以我认为这是不正确的。
有一种特殊情况,即 IE MIME 类型的嗅探,我认为这可能会导致漏洞利用。毕竟,IE 7 仍然具有执行嵌入在图像注释中的脚本标签的“功能”,而不管 Content-Type header 如何。让我们先把这种明显愚蠢的行为放在一边。
当然,JSON 会被原生 JavaScript 解析器(Firefox 中的 Window.JSON)或 eval()
根据旧的默认 jQuery 行为解析。在这两种情况下,以下表达式都不会导致警报被执行:
{"myJSON": "legit", "someParam": "12345<script>alert(1)</script>"}
我是对还是错?
最佳答案
使用正确的 Content-Type
可以避免这种潜在的 xss 漏洞。基于 RFC-4627所有 JSON 响应都应使用 application/json
类型。以下代码不易受 xss 攻击,请继续测试:
<?php
header('Content-type: application/json');
header("x-content-type-options: nosniff");
print $_GET['json'];
?>
nosniff
header 用于禁用旧版本 Internet Explorer 上的内容嗅探。另一个变种如下:
<?php
header("Content-Type: application/json");
header("x-content-type-options: nosniff");
print('{"someKey":"<body onload=alert(\'alert(/ThisIsNotXSS/)\')>"}');
?>
当浏览器查看上述代码时,系统会提示用户下载 JSON 文件,JavaScript 未在现代版本的 Chrome、FireFox 和 Internet Explorer 上执行。这将是一个 RFC违规。
如果您使用 JavaScript eval()
上面的 JSON 或将响应写入页面,则它变为 DOM Based XSS .基于 DOM 的 XSS 在客户端上通过在处理此数据之前清理 JSON 进行修补。
关于javascript - 是否可以通过适当的 JavaScript 字符串转义来利用 JSON 响应进行 XSS 攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3146324/