CORS配置到底该怎么写才安全?

打工人俊锡 阅读 7

我在本地开发时调后端接口老是被CORS拦住,试过在Nginx里加add_header 'Access-Control-Allow-Origin' '*';,虽然能通了,但听说这样不安全。那到底应该怎么配才既能让前端正常请求,又不会把接口暴露给所有人?

后端是用Node写的,现在临时用了这个配置:

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  next();
});

但上线前肯定得改,只是不确定该改成什么值,求指点!

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
长孙红佑
CORS配置安全的核心就一点:把 * 换成具体的域名。

最常见的写法是这样的:

app.use((req, res, next) => {
const allowedOrigins = ['http://localhost:3000', 'https://your-frontend.com'];
const origin = req.headers.origin;

if (allowedOrigins.includes(origin)) {
res.header('Access-Control-Allow-Origin', origin);
}

res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
next();
});


如果前端请求需要带cookie或者authorization头,得再加一个配置:

if (allowedOrigins.includes(origin)) {
res.header('Access-Control-Allow-Origin', origin);
res.header('Access-Control-Allow-Credentials', 'true');
}


注意哈,用credentials的时候,Origin 绝对不能用 *,必须指定具体域名,前端那边也要改成 credentials: 'include'

开发环境就把 localhost 加进去,生产环境换成你实际的域名就行。复制过去试试,有问题再调。
点赞
2026-03-19 12:02