发布于 2026-01-06 8 阅读
0

澄清 CORS——跨域资源共享

澄清 CORS——跨域资源共享

内容

  1. 引言
  2. 访问控制标头
  3. 速率限制
  4. 概括

引言

接续我之前关于网站安全周的博客,我们将讨论网络上的 CORS。

CORS 是跨域资源共享协议,通常用于网站和 API 托管在不同的服务器上的情况。例如,您的网站位于 website.com,而 API 位于 api.com。
这是一种常见的架构模式,因为它允许每个 API 和网站独立运行,速度更快,但也可能引入一些安全问题。

访问控制标头

要允许 CORS 请求,您的 API 需要响应某些标头,这些标头允许您的网站/前端执行某些行为。

来源访问控制允许

这个请求头可以通过调用 API 的源地址来设置origin,但只能是单源请求。
或者,它也可以是一个单源*请求头,但这不允许传递凭据,我们稍后会讨论这个问题。

如果可能的话,最好将特定原点设置为*

用法示例:

Access-Control-Allow-Origin: https://mozilla.org
Enter fullscreen mode Exit fullscreen mode




访问控制允许方法

您可以设置此标头,其中包含允许用于联系您的 API 的 HTTP 方法列表。

一般来说,OPTIONS 请求应该包含在这个列表中,因为任何前端在发出实际请求之前都会先发出一个 OPTIONS 请求(通常称为预检请求)。GET 请求不会发出 OPTIONS 请求。

也可以*,但是如果可以的话,你应该说得更具体一些。

用法示例:

Access-Control-Allow-Methods: POST, GET, OPTIONS
Enter fullscreen mode Exit fullscreen mode




访问控制最大期限

这个请求头可以设置为前端缓存预检 OPTIONS 请求的时间段。该值以秒为单位,例如 86400 秒等于 24 小时。

假设您已将 Max-Age 设置为上述值,这意味着您从前端向 API 发出的第一个请求将先发出一个 OPTIONS 请求,然后再发出实际请求。之后 24 小时内无需再向该 API 发出另一个 OPTIONS 请求。

用法示例:

Access-Control-Max-Age: 86400
Enter fullscreen mode Exit fullscreen mode




访问控制允许标头

您可以设置此标头,其中包含允许传递给 API 的标头列表。

用法示例:

Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Enter fullscreen mode Exit fullscreen mode




访问控制允许凭据

此标头指定是否在请求中包含凭据。凭据包括 cookie、授权标头或 TLS 客户端证书。

用法示例:

Access-Control-Allow-Credentials: true
Enter fullscreen mode Exit fullscreen mode




速率限制

请注意,该Access-Control-Allow-Origin标头仅阻止浏览器向 API 发送请求,并不能阻止其他机器、命令行、Postman 等工具调用您的 API。
您应该确保已采取其他安全措施来防止 API 被滥用,例如身份验证和速率限制。

速率限制是指限制对 API 的调用次数。根据 API 的开发方式,可以通过多种方式实现。我建议您寻找一些库来帮助您管理速率限制。

概括

总而言之,将 API 和网站分离可以带来实实在在的开发优势,但同时也可能引入安全问题,例如需要处理 CORS 问题。
希望本文能帮助您更好地理解 CORS 及其安全防护措施。

现在就设置这些标头!

祝您搭建愉快!

文章来源:https://dev.to/jordanfinners/clarifying-cors-cross-origin-resource-sharing-4dk9