Implement CORS 安全
CORS (Cross-源 Resource Sharing) allows controlled cross-源 requests. Learn 到 configure origins, 方法, headers, 和 credentials 安全.
- 1
CORS allows browser 开 one 源到 请求 resources 从另一个. 服务器 responds 具有 Access-Control-允许-源 (允许 origins), Access-Control-允许-方法 (允许 HTTP 方法), Access-Control-允许-Headers (允许请求 headers), 和 Access-Control-允许-Credentials (是否 cookies 是允许). Preflight requests (OPTIONS) 检查 permissions 之前 actual 请求.
- 2 URL 解析器 →
解析 the Origin header to validate the requesting origin. Compare against a whitelist of allowed origins. Never use Access-Control-Allow-Origin: * with Access-Control-Allow-Credentials: true — this is invalid and browsers will reject it. Echo the specific origin back: Access-Control-Allow-Origin: https://example.com.
- 3 哈希计算器 →
为动态源 validation, hash 源和 比较针对集合的 允许源 hashes. 此 avoids storing raw origins 在配置和 allows O(1) lookup. Use SHA-256 为 hash. Alternatively, use regex 或 prefix 匹配为 wildcard subdomains (*.示例.com).
常见问题
- 应该 I use CORS * (wildcard)?
- Only 为公共 APIs 无 credentials. 具有 Access-Control-允许-源: *, cookies 是不 sent (Access-Control-允许-Credentials 必须是 假), 和所有 origins 能够 access API. 为 APIs 具有认证或 sensitive 数据, 指定允许 origins explicitly. 从不 use * 具有 credentials — browsers 拒绝它.
- 什么是 CORS preflight?
- 为 "non-简单" requests (自定义 headers, 方法其他 than GET/POST/HEAD, 内容类型其他 than form/文本), browser sends OPTIONS 请求第一 (preflight). 服务器 responds 具有允许方法, headers, 和源. 如果 preflight passes, actual 请求是 sent. 简单 requests (GET 具有否 自定义 headers) 不 require preflight.