javascript - 是否可以通过适当的 JavaScript 字符串转义来利用 JSON 响应

可以通过重写 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/

相关文章:

java - gson 在自定义反序列化器中调用标准反序列化

javascript - 如何确定性地验证 JSON 对象是否未被修改?

json - 如何使用 Elasticsearch 搜索嵌套对象

json - 使用 HTTPie 发送嵌套的 JSON 对象

java - 如何使用 Jackson json 注释枚举字段以进行反序列化

javascript - 在 Node.js 下存储 JSON 的简单方法

javascript - JSON 对象的增量编码

java - 仅使用字符串和值解析 JSON 对象

c# - 在 asp.net 中将 JSON 转换为 .Net 对象时出错

javascript - D3 - 如何处理 JSON 数据结构?