在 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