【问题标题】:How does CORS actually protect against security issues?CORS 如何真正防止安全问题?
【发布时间】:2020-01-19 02:22:21
【问题描述】:

在阅读了 MDN 和 CodeAcademy 的大量文档后,我仍然不完全了解 CORS 握手实际上可以防止什么。

我了解该机制应保护浏览器在没有进一步控制的情况下请求位于不同来源的资源。

此外,据我了解规范,访问控制决策完全由作为 CORS 请求目标的服务器评估。 例如,如果服务器回复时设置了“Access-Control-Allow-Origin”标头(例如“*”),则允许浏览器处理该响应。

这里有两种情况会引起我的疑问:

  • 如果我是一个邪恶的服务器开发者,我会回复 “Access-Control-Allow-Origin”设置为 * always,它允许 浏览器来处理响应。
  • 如果我是一个邪恶的人,并且无论如何都想访问资源,我会使用未实现 CORS 机制的(自定义)Web 客户端。

提到这两种情况,我想知道 CORS 真正能防止什么。而且我想知道拒绝来自禁止来源的请求并在响应中发送适当的 HTTP 状态(例如 403 Forbidden)是否更安全。

可能我遗漏了一些东西,但如果有任何正确方向的提示,我将不胜感激。

【问题讨论】:

标签: web-services http browser cors


【解决方案1】:

回应您的观点:

  1. CORS 关注的是防止跨域访问。在这种情况下,假设您正在访问 goodserver.com,他们将为您提供内容,因此他们是行话中的 origin。据推测,他们不会为您提供任何与evilserver.com 交谈的内容。请注意,CORS 因此并没有试图阻止跨站点脚本 - 其中攻击者以某种方式将代码放在您的源上,确实evilserver.com 对话。

  2. CORS 是在你的浏览器中实现的,所以作为一个坏人,你需要编写一个浏览器并说服人们下载并运行它。但是,如果您编写本机应用程序或使用 HTML 表单,您是对的,您不会从 CORS 安全性中受益。

您的问题确实突出了 CORS 系统在哪里依赖信任,这值得牢记。

您可能会发现这很有帮助,因为他们会逐步完成整个过程:

https://www.moesif.com/blog/technical/cors/Authoritative-Guide-to-CORS-Cross-Origin-Resource-Sharing-for-REST-APIs/

【讨论】:

  • 感谢您的回答。我不明白的是,为什么作为服务器/服务开发人员我应该提供响应并将其评估留给浏览器。我会说,如果我不支持特定来源,我不会提供任何数据,而是提供带有错误代码的 empy HTTP 响应。
猜你喜欢
  • 2017-12-09
  • 2011-03-04
  • 2020-10-28
  • 2018-06-16
  • 1970-01-01
  • 2015-02-26
  • 2021-12-24
  • 2016-04-29
  • 2018-10-12
相关资源
最近更新 更多