🌐 每个后端开发者必须了解的 CORS 策略

发布: (2025年12月17日 GMT+8 23:34)
3 min read
原文: Dev.to

Source: Dev.to

Cover image for 🌐 CORS Policies Every Backend Developer Must Know

什么是 CORS?

CORS 是一种浏览器安全机制,用于控制来自一个来源(域)的资源如何被另一个来源访问。

重要提示: CORS 由浏览器强制执行,但由后端进行配置。

最常见的 CORS 错误

Access-Control-Allow-Origin: *

此响应头允许任何网站调用你的 API。如果你的 API 使用 cookie、令牌或会话,这将是一个严重的安全风险。

安全的 CORS 配置最佳实践

1️⃣ 使用受信任来源的白名单

只允许已知域名:

const allowedOrigins = [
  'https://app.example.com',
  'https://admin.example.com'
];

2️⃣ 切勿在使用凭证时使用通配符

当你使用 cookie、JWT(放在请求头中)或会话时,必须指定精确的来源:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://app.example.com

Access-Control-Allow-Credentialstrue 时,* 不被允许

3️⃣ 限制允许的 HTTP 方法

仅允许 API 实际需要的方法:

Access-Control-Allow-Methods: GET, POST, PUT, DELETE

避免不必要地暴露未使用的 PATCHOPTIONS 等方法。

4️⃣ 限制允许的请求头

明确声明哪些请求头是被允许的:

Access-Control-Allow-Headers: Content-Type, Authorization

5️⃣ 正确处理预检(OPTIONS)请求

浏览器在某些 API 调用前会发送 OPTIONS 请求。

最佳实践:

  • 快速响应(例如 204 No Content)。
  • 不要对预检响应要求身份验证。
  • 返回相应的 CORS 头部。

6️⃣ 基于环境的 CORS 规则

环境策略
开发允许 localhost
预发布允许测试域名
生产严格的白名单

这种方式在保持开发便利的同时,确保生产环境的安全。

7️⃣ 不要把 CORS 当作安全机制

CORS 不能替代:

  • 身份验证
  • 授权
  • 限流
  • 输入校验

攻击者仍然可以使用 Postman、curl 等工具直接调用你的 API。

示例:安全的 Node.js CORS 配置

const cors = require('cors');
const express = require('express');
const app = express();

app.use(cors({
  origin: ['https://app.example.com'],
  methods: ['GET', 'POST', 'PUT', 'DELETE'],
  allowedHeaders: ['Content-Type', 'Authorization'],
  credentials: true,
  maxAge: 86400 // seconds
}));

面试技巧

问: CORS 是前端还是后端的安全特性?
答: CORS 由浏览器强制执行,但由后端控制。

最后思考

优秀的后端开发者:

  • 使用最小权限的 CORS 设置。
  • 在生产环境中避免使用通配符。
  • 将不同环境的配置分离。
  • 明白 CORS 并不是实际安全控制的替代品。

正确的 CORS 配置展示了专业的后端成熟度。

Back to Blog

相关文章

阅读更多 »

你正在错误地使用 TailwindCSS

我之前已经提到过,为什么我通常不建议在我的项目中将 Tailwind CSS 作为主要的样式方案,并且我已经解释了这一立场……