【发布时间】:2012-06-16 00:46:40
【问题描述】:
我正在构建一个专门使用 JSON 作为其请求和响应内容的 Web 服务(即,没有表单编码的有效负载)。
如果满足以下条件,Web 服务是否容易受到 CSRF 攻击?
任何没有顶级 JSON 对象的
POST请求,例如,{"foo":"bar"},都将被 400 拒绝。例如,内容为42的POST请求将因此被拒绝.任何内容类型不是
application/json的POST请求都将被拒绝并返回400。例如,内容类型为application/x-www-form-urlencoded的POST请求将因此被拒绝。所有 GET 请求都将是 Safe,因此不会修改任何服务器端数据。
客户端通过会话 cookie 进行身份验证,Web 服务在通过带有 JSON 数据的 POST 提供正确的用户名/密码对后提供给客户端,例如
{"username":"user@example.com", "password":"my password"}。
辅助问题:PUT 和 DELETE 请求是否容易受到 CSRF 的攻击?我问是因为似乎大多数(所有?)浏览器都不允许在 HTML 表单中使用这些方法。
编辑:添加项目 #4。
编辑:到目前为止,有很多好的 cmets 和答案,但没有人提供此 Web 服务易受攻击的特定 CSRF 攻击。
【问题讨论】:
-
通过会话和cookie配对值标记您的请求,清理您通过提交的JSON触发的任何指令,添加盐以增加风味
-
我认为这里没有足够的信息来提供一个好的答案。您使用什么身份验证方法?谁是 Web 服务的预期消费者(即,与您的服务在同一主机上的站点的用户?)
-
您当前的所有验证都是完全合理的,并且确实限制了您的攻击面,但它们实际上并没有解决与 CSRF 漏洞有关的任何问题。
-
@DavidBalažic 什么载体?如果您在谈论 AJAX,同源策略会阻止这种情况发生。