在 API 上启用 CORS

Posted

技术标签:

【中文标题】在 API 上启用 CORS【英文标题】:Enabling CORS on an API 【发布时间】:2014-12-04 11:00:32 【问题描述】:

我们目前正在开发一种 API,以允许客户和经销商购买和管理我们的产品。

目前我们没有在服务器上启用 CORS。这会阻止 js(例如 Angularjs)访问 API。

我希望启用这些标头,以便客户可以通过浏览器中的 js 访问我们的 API。

在通配符上实施 CORS 以允许在本质上将是公共 API 上执行此操作有哪些风险?这是否会使我们的 API 在本质上更容易受到滥用或其他任何影响?

Access-Control-Allow-Origin: *

在向我们的老派后端开发人员提出论点时,我还应该考虑其他什么吗?谢谢。

【问题讨论】:

【参考方案1】:

如果您的 API 是公开的,我认为没有任何风险..(即使它是带有身份验证的私有 API) 简而言之,人们将能够从他们自己的域中调用它。

但您可以将其限制为域,您不必使用通配符。

【讨论】:

谢谢,我想投票,但由于声誉问题,我不能投票。【参考方案2】:

给定:

Alice,网站运营人员 Bob,一个使用 Alice 网站的人 Mallory,一个运行恶意网站的人

如果您使用 CORS 从浏览器启用对 API 的全局访问,则:

如果 Bob 可以被诱骗访问 Mallory 的网站,那么 Mallory 的网站可以指示 Bob 的浏览器从 Alice 的网站获取数据并将其提供给 Mallory 的网站。

如果 Bob 登录到 Alice 的网站,则浏览器将发送验证 Bob 身份所需的所有 cookie。

然后,Mallory 可以访问 Alice 网站上应该对 Alice 和 Bob 保密的任何数据(例如 Bob 的订单历史记录、医疗记录或 Alice 网站存储的任何其他数据)。

如果通过 API 提供的数据仅包含公共信息,那么将其设为全球可访问就没有问题。如果它包含个人数据,那么您需要考虑使用一些辅助身份验证方式。

【讨论】:

感谢@Quentin。 API 当前设置为登录,其中创建 24 小时的 api 密钥。与 API 的任何进一步交互都需要此 API 密钥。这是您认为的“辅助身份验证方式”吗?

以上是关于在 API 上启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 Django REST api 上调试启用 CORS

如何在 paypal SDK API 上启用 CORS?

在哪里启用cors?

如何在 nodejs express 重定向上启用 CORS?

为 REST API 启用 CORS 支持

在 React 应用中启用 CORS