🔀 CORS检查
CORS跨域配置检查,分析Access-Control响应头安全性
📖 什么是CORS
跨源资源共享(Cross-Origin Resource Sharing, CORS)是一种基于HTTP头的机制,允许服务器声明哪些源站可以通过浏览器访问其资源。
安全风险:配置不当的CORS策略可能导致敏感数据泄露、CSRF攻击、用户账户被接管。
常见漏洞:Access-Control-Allow-Origin设为*或反射Origin值、缺少Credentials控制、过度暴露Headers。
安全风险:配置不当的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。
不要反射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();
});