是否需要CSRF保护免于副作用GET请求?

我正在开发一个Web应用程序,其中所有动态内容都作为JSON与Ajax请求一起检索。 我正在考虑是否应该保护来自不同来源的GET API调用?

GET请求不会修改状态,普遍的看法是它们不需要CSRF保护。 但是,我想知道是否没有哪个浏览器将这些请求的结果泄漏到不同的原始网站?

例如,如果一个不同的起源站点GET / users / emails为脚本,css或img,浏览器是否有可能将结果的json泄露给调用站点(例如,通过javascript onerror handler)?

浏览器是否提供足够强的保证,以确保交叉源JSON响应的内容不会泄露? 你是否认为保护GET请求不受跨源数据调用是有意义的,还是它是矫枉过正的?


你已经钉了一个角落的案件,但高度相关的问题。 事实上,有这种可能性,它被称为JSON包含或跨站点脚本包含或Javascript包含,这取决于你所指的人。 基本上,攻击是在一个邪恶的网站上进行的,然后通过JavaScript访问结果,一旦js引擎解析了它。

简言之,所有的JSON响应都必须包含在一个对象中,而不是数组或JSONP(如:{...}),为了更好地衡量,您应该使用前缀开始所有响应(while(1),for (;;)或解析器断路器)。 查看Facebook或Google的JSON响应以获得实例。 或者,您可以通过使用CSRF保护使您的URL无法推测 - 两种方法都可行。


没有:

这不是一个CSRF问题,只要你返回纯JSON并且你的GET方面是免费的,它不需要被csrf保护。

Paradoxengine提到的另一个漏洞是:如果您使用JSONP,攻击者可能会读取发送给已验证用户的JSON。 即使使用常规的JSON,也可以以这种方式攻击非常旧的浏览器(IE 5.5)的用户。


您可以将请求发送到不同的域(这是CSRF攻击所做的),但无法读取响应。

我从另一个堆栈溢出问题中了解了这个问题看起来我错误地理解了CSRF? 希望这可以帮助你理解这个问题。

链接地址: http://www.djcxy.com/p/47781.html

上一篇: Is CSRF protection for side effect free GET requests needed?

下一篇: JSON Output sent as Response to be wrapped in dictionary