🔒 修复CORS逻辑 - 正确处理同源请求
问题: - 第一次修复过于严格,拒绝了所有无Origin头的请求 - 导致浏览器的同源请求被拒绝,网站完全无法使用 修复方案: - 允许无Origin头的请求(同源请求不触发CORS) - 严格验证带Origin头的跨域请求(必须在白名单中) - 拒绝所有未授权的跨域请求 文件修改: - backend/server.js: 修正CORS中间件逻辑(第48-63行) 测试: - 同源请求正常工作 - 恶意跨域请求被拒绝 - API返回正确的状态码(不再是500错误)
This commit is contained in:
@@ -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策略不允许来自该来源的访问'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user