我正在开发一个Web应用程序,其中所有动态内容都是使用Ajax请求以JSON的形式检索的。我正在考虑是否应该保护GET API调用不被来自不同的来源?
GET请求不会修改状态,一个普遍的看法是它们不需要CSRF保护。但我想知道是否存在浏览器将此类请求的结果泄漏到其他原始站点的极端情况?
例如,如果一个不同的源站点GETs / users / emails作为script,css或img,浏览器是否可能将json泄漏到调用站点(例如通过javascript onerror handler)?
浏览器是否提供足够强大的保证,以防止交叉原始JSON响应的内容泄露?您是否认为保护GET请求免受跨越来源的呼叫是有意义的还是过度杀伤?
答案 0 :(得分:1)
你已经确定了一个角落案例,但却是一个高度相关的问题。实际上,存在这种可能性,它被称为JSON包含或跨站点脚本包含或Javascript包含,具体取决于您所指的人。攻击基本上是在邪恶的网站上进行,然后在js引擎解析后通过javascript访问结果。
简短的故事是,你的所有JSON响应都必须包含在一个Object中,而不是一个数组或JSONP(所以:{...}),为了更好地衡量,你应该用前缀开始所有的响应(while(1) ),for(;;)或解析器断路器)。查看Facebook或谷歌的JSON响应,以获得一个实例。 或者,您可以通过使用CSRF保护来使您的URL不可用 - 这两种方法都有效。
答案 1 :(得分:0)
没有
这不是CSRF问题,只要您返回纯JSON并且您的GET是免费的,它就不必受csrf保护。
Paradoxengine提到的另一个漏洞是:如果您使用的是JSONP,则possible for an attacker to read将JSON发送给经过身份验证的用户。非常旧的浏览器(IE 5.5)的用户can also be attacked in this way甚至使用常规JSON。答案 2 :(得分:0)
您可以将请求发送到其他域(这是CSRF攻击所做的),但您无法阅读回复。
我从另一个堆栈溢出问题中了解到这一点It seems like I understand CSRF incorrectly? 希望这有助于您理解这个问题。