过度宽松的CORS设置会导致CSRF吗?

时间:2016-07-19 17:36:45

标签: cors csrf same-origin-policy

我觉得在任何时候我看到CORS上的文档,它建议只有一个默认的Access-Control-Allow-Origin: *配置。在我看来,这是使您的API现在容易受到CSRF攻击的完美方式。解释是同源策略是阻止浏览器中的XHR请求使API端点完全容易受到CSRF攻击的唯一因素,而且CORS本质上是SOP的旁路。

我的逻辑听起来是任何具有过度宽松的CORS设置的网站基本上都会将其后端API暴露给CSRF攻击吗?如果是这样的话,那么任何时候提出CORS都应该明确提到这一点。

1 个答案:

答案 0 :(得分:0)

允许所有来源当然不是最佳做法,但除非您在传入请求中允许使用Cookie,否则这不一定会使您受到CSRF的约束。要减轻CSRF,您需要:

  1. 验证原点。通常,您可以在代码或配置中定义白名单。如果传入的来源不在白名单中,请使用403状态代码拒绝该请求。
  2. 通过令牌添加反CSRF支持。 Microsoft在ASP.NET MVC和Web API中使用它们有很好的article。基本上,令牌只是随机字符串,在每个请求上都会发生变化。
  3. 另外,请考虑使用Cookie之外的其他内容来验证请求/用户。例如,考虑使用通过Authorization标头提交的身份验证令牌。

    我强烈建议您了解有关CORS和减轻CSRF的更多信息,这是Monsur Hossain的书CORS In Action。作者还创建了一个很好的伴侣网站(enable-cors.org),其中包含样本和其他资源的链接。