SuperAPI AI 工具集

cors-configuration

安全与审计

查看项目

更新于 10-15 10:39

技能介绍

用途

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) 承担责任。资料未提供该技能的具体安装命令、收费信息或平台限制,这些内容暂未提供。