🔀 CORS检查

CORS跨域配置检查,分析Access-Control响应头安全性

📖 什么是CORS
跨源资源共享(Cross-Origin Resource Sharing, CORS)是一种基于HTTP头的机制,允许服务器声明哪些源站可以通过浏览器访问其资源。

安全风险:配置不当的CORS策略可能导致敏感数据泄露、CSRF攻击、用户账户被接管。
常见漏洞:Access-Control-Allow-Origin设为*或反射Origin值、缺少Credentials控制、过度暴露Headers。
🔍 手动分析响应头
🛠️ CORS配置生成器
生成的CORS配置
/* 尚未配置 */
🧪 CORS测试Payload
Origin: https://evil.com
测试是否反射任意Origin 高风险
Origin: https://attacker.example.com
测试子域名是否被接受 中风险
Origin: null
测试null Origin是否被接受(iframe沙箱会发送null) 高风险
Access-Control-Request-Method: DELETE
预检请求测试危险HTTP方法 中风险
Access-Control-Request-Headers: X-Custom-Attack
预检请求测试自定义头 信息
✅ CORS安全检查清单
🛡️ 修复建议
1. 严格白名单验证
不要反射Origin头,而是在服务端维护允许的源列表,逐一匹配。

2. 避免使用通配符
当Allow-Credentials为true时,浏览器不允许Allow-Origin为*。即使不需要Credentials,也应明确指定允许的源。

3. 添加Vary: Origin
确保响应不会被缓存错误地复用给不同Origin的请求。

4. 限制方法和头
仅允许必要的HTTP方法和请求/响应头,不要为了方便而全部放行。

5. 防止null Origin攻击
不要允许null作为有效的Origin值,沙箱iframe会发送null Origin。
// Node.js Express 安全CORS配置示例 const allowedOrigins = ['https://example.com', 'https://app.example.com']; app.use((req, res, next) => { const origin = req.headers.origin; if (allowedOrigins.includes(origin)) { res.setHeader('Access-Control-Allow-Origin', origin); res.setHeader('Vary', 'Origin'); res.setHeader('Access-Control-Allow-Credentials', 'true'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.setHeader('Access-Control-Max-Age', '86400'); } if (req.method === 'OPTIONS') return res.sendStatus(204); next(); });