🔒 修复CORS逻辑 - 正确处理同源请求

问题:
- 第一次修复过于严格,拒绝了所有无Origin头的请求
- 导致浏览器的同源请求被拒绝,网站完全无法使用

修复方案:
- 允许无Origin头的请求(同源请求不触发CORS)
- 严格验证带Origin头的跨域请求(必须在白名单中)
- 拒绝所有未授权的跨域请求

文件修改:
- backend/server.js: 修正CORS中间件逻辑(第48-63行)

测试:
- 同源请求正常工作
- 恶意跨域请求被拒绝
- API返回正确的状态码(不再是500错误)
This commit is contained in:
2025-11-18 17:08:22 +08:00
parent e026c13fd3
commit 746539a067

View File

@@ -46,11 +46,19 @@ const corsOptions = {
}
// 严格白名单模式:只允许白名单中的域名
if (origin && allowedOrigins.includes(origin)) {
// 但需要允许没有Origin头的同源请求浏览器访问时不会发送Origin
if (!origin) {
// 没有Origin头的请求通常是
// 1. 浏览器的同源请求不触发CORS
// 2. 直接的服务器请求
// 这些都应该允许
callback(null, true);
} else if (allowedOrigins.includes(origin)) {
// 白名单中的域名
callback(null, true);
} else {
// 拒绝不在白名单中的请求包括没有Origin头的请求
console.warn(`[CORS] 拒绝来自未授权来源的请求: ${origin || '(无Origin头)'}`);
// 拒绝不在白名单中的跨域请求
console.warn(`[CORS] 拒绝来自未授权来源的请求: ${origin}`);
callback(new Error('CORS策略不允许来自该来源的访问'));
}
}