是JSON Web服务容易受到CSRF攻击?是JSON Web服务容易受到CSRF攻击?(Are J

2019-05-12 22:26发布

我构建一个只使用JSON其请求和响应的内容(即无形式编码的有效载荷)的Web服务。

是一个Web服务容易受到CSRF攻击,如果以下为真?

  1. 任何POST没有顶层JSON对象请求,例如, {"foo":"bar"}将与400。例如被拒绝,一个POST与内容请求42将因此被拒绝。

  2. 任何POST与内容类型比其它请求application/json将与400。例如被拒绝,一个POST与内容类型请求application/x-www-form-urlencoded将由此拒绝。

  3. 所有的GET请求将是安全的 ,因此不能修改任何服务器端的数据。

  4. 客户端通过一个会话cookie,使Web服务给了他们通过与JSON数据,例如POST提供正确的用户名/密码对后验证{"username":"user@example.com", "password":"my password"}

补充问题:是否PUTDELETE请求以往容易受到CSRF? 我问,因为它似乎大多数(所有?)浏览器不允许在HTML表单这些方法。

编辑:添加项目#4。

编辑:好的意见和答案很多,到目前为止,但没有人提供了一个特定的CSRF攻击到该Web服务是脆弱的。

Answer 1:

锻造用任意媒体类型任意CSRF请求被有效唯一可能与XHR,因为一个形式的方法是有限的GET和POST和形式的POST消息主体还限定于三种格式application/x-www-form-urlencodedmultipart/form-data ,以及text/plain 。 然而, 与表单数据编码text/plain它仍然是可能的伪造包含有效JSON数据请求 。

因此,唯一的威胁来自于基于XHR-CSRF攻击。 而那些只能成功,如果他们要么

  • 来自同一产地,从您自己的网站以某种方式(如XSS)中运行,所以基本上,或
  • 从不同来源运行,您的服务器允许这种跨域请求 。

如果你能同时消除,您的Web服务不会受到CSRF。 至少不是那些通过网络浏览器进行。



Answer 2:

对的,这是可能的。 您可以设置将发送回一个307攻击者的服务器重定向到目标服务器到受害者的机器。 您需要使用闪光灯发送POST而不是使用表格。

参考: https://bugzilla.mozilla.org/show_bug.cgi?id=1436241

这也适用于Chrome。



Answer 3:

这是可以做到的CSRF采用Ajax JSON基于RESTful服务。 我测试了这个上的应用程序(同时使用Chrome和Firefox)。 你必须要改变的contentType为text /平原和数据类型为JSON以avaoid预检请求。 然后你就可以发送请求,但为了送sessiondata,您需要设置withCredentials标志在你的Ajax请求。 我在这里(参考文献包括在内)更详细地讨论这样的:

http://wsecblog.blogspot.be/2016/03/csrf-with-json-post-via-ajax.html



Answer 4:

我有一个关于第3点虽然可以认为是安全的,因为它不会改变在服务器端的数据有些疑惑,数据仍然可以读出,并且风险是,它们可以被窃取。

http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/



Answer 5:

是一个Web服务容易受到CSRF攻击,如果以下为真?

是。 它仍然是HTTP。

被PUT和DELETE请求以往容易受到CSRF?

似乎大多数(所有?)浏览器不允许在HTML表单这些方法

你认为浏览器是使一个HTTP请求的唯一途径?



文章来源: Are JSON web services vulnerable to CSRF attacks?