用途
CORS Configuration 是一个安全配置技能,目标是帮助开发者正确配置跨域资源共享(CORS),避免凭证泄露和未授权的跨域访问。资料指出,错误配置的 CORS 是常见的开发失误之一,其中「通配符来源 + 启用凭证」等同于完全没有安全防护。
核心规则
资料给出的规则是:绝不要在使用凭证(credentials)时设置 Access-Control-Allow-Origin: *,始终白名单化具体来源。
常见错误与修复
资料以表格形式列出常见错误、风险与修复方式:
- 来源为
*且启用凭证:任何站点都能窃取用户数据;修复方式是白名单化具体来源。 - 未校验直接反射 Origin 头:攻击者可控制被允许的来源;修复方式是对照允许列表检查。
- 允许 null 来源:沙箱化 iframe 可被利用;修复方式是永不允允许 null。
- 过宽的正则(如
*.example.com):evil-example.com也会匹配;修复方式是使用精确字符串匹配。 - 暴露全部响应头:造成信息泄露;修复方式是只暴露必要的响应头。
各框架实现要点
资料提供了五种框架的示例代码,均保留原始内容:
- Cloudflare Workers:定义
ALLOWED_ORIGINS数组,仅在开发环境(env.ENVIRONMENT === 'development')追加http://localhost:3000;通过corsHeaders函数校验请求的 Origin,不在白名单则返回空对象(浏览器会阻止请求);对OPTIONS预检请求返回 204 并附带 CORS 头;对实际响应也附加 CORS 头。 - Express.js:资料先给出错误示例
app.use(cors())(允许所有来源,危险),再给出正确示例:使用origin回调函数,无 Origin 的请求(移动应用、curl)放行,白名单内的来源放行,否则报错;同时设置credentials: true、允许的方法、允许的头和maxAge。 - Next.js API Routes:在
middleware.ts中定义白名单,读取请求origin头并判断是否允许;对OPTIONS预检返回 204 及相应头;对普通响应在允许时设置Access-Control-Allow-Origin和Access-Control-Allow-Credentials;通过config.matcher限定为/api/:path*。 - Laravel:在
config/cors.php中配置paths、allowed_methods、allowed_origins(具体来源列表)、allowed_origins_patterns(留空,避免正则)、allowed_headers、exposed_headers、max_age和supports_credentials。 - Python FastAPI:使用
CORSMiddleware,allow_origins设为具体来源列表(注释强调绝不在启用凭证时使用["*"]),并设置allow_credentials、allow_methods、allow_headers和max_age。
检查清单
资料末尾给出 CORS 检查清单:来源显式白名单化(凭证场景无通配符);Access-Control-Allow-Origin 绝不反射不可信输入;允许列表中不含 null 来源;正确处理预检(OPTIONS)请求;设置 Access-Control-Max-Age 以减少预检请求;只允许必要的方法和头;生产环境排除开发来源(localhost)。
适用场景
适用于需要跨域访问 API 的 Web 应用与后端服务,尤其是涉及凭证(Cookie、Authorization 头)的场景,以及使用上述五种框架的项目。
限制与合规说明
资料提到 PDPA 2024 相关性:错误配置的 CORS 若允许任何网站访问已认证的 API 端点,构成未能实施「langkah keselamatan yang munasabah」(合理安全措施);若用户数据通过 CORS 错误配置被窃取,开发者可能依据 Seksyen 5(1) 承担责任。资料未提供该技能的具体安装命令、收费信息或平台限制,这些内容暂未提供。