最常见且最危险的cors配置错误是origin反射+credentials启用:服务端将请求origin原样写入access-control-allow-origin响应头,同时设置access-control-allow-credentials: true,导致攻击者可从任意恶意域名发起带cookie的跨域请求并窃取敏感数据。

检查响应头中 Access-Control-Allow-Origin 是否反射 Origin
这是最常见也最危险的配置错误:服务端直接把请求里的 Origin 值原样写进 Access-Control-Allow-Origin 响应头,且同时设置了 Access-Control-Allow-Credentials: true。浏览器会放行带 Cookie 的跨域请求,攻击者就能用任意域名发起请求并读取敏感响应。
实操建议:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 用
curl -H "Origin: https://evil.com" -I https://target.com/api/user发起请求,看响应头是否返回Access-Control-Allow-Origin: https://evil.com - 换几个非法 Origin(如
null、https://a.evil.com、http://target.com)反复测试,观察响应是否始终匹配 - 若返回
Access-Control-Allow-Origin: *且同时有Access-Control-Allow-Credentials: true,该组合非法,浏览器直接拒绝,但说明服务端逻辑可能绕过校验
验证 null 源是否被接受
某些站点错误地允许 Origin: null,而攻击者可通过沙盒 iframe 或本地 HTML 文件轻松触发该源。一旦配合 credentials: true,就能在恶意页面中窃取登录态数据。
实操建议:
- 新建一个本地
poc.html,内容为:<iframe sandbox="allow-scripts" src="data:text/html,<script>fetch('https://target.com/api/profile',%20%7Bcredentials:'include'%7D).then(r%20=>%20r.text()).then(console.log)</script>"></iframe> - 在 Chrome 中直接双击打开该 HTML(注意是
file://协议),观察控制台是否成功获取响应 - 抓包确认请求头中
Origin确实为null,且响应头返回了Access-Control-Allow-Origin: null和Access-Control-Allow-Credentials: true
对比 OPTIONS 预检响应与实际请求响应的一致性
浏览器对非简单请求(如带自定义 header、Content-Type: application/json)会先发 OPTIONS 预检。若预检响应宽松,但后续真实响应头缺失或不一致,可能导致部分客户端行为异常,或暴露校验逻辑漏洞。
实操建议:
- 用
curl -X OPTIONS -H "Origin: https://test.com" -H "Access-Control-Request-Method: POST" -I https://target.com/api/submit查看预检响应 - 再发真实 POST 请求,比对
Access-Control-Allow-Origin、Access-Control-Allow-Headers、Access-Control-Allow-Methods是否完全一致 - 特别留意
Access-Control-Allow-Headers是否过度开放(如包含Cookie、Authorization),这可能暗示服务端未做白名单校验
留意 Vary: Origin 缺失带来的缓存污染风险
当 Access-Control-Allow-Origin 是动态生成的,但响应没带 Vary: Origin 头,CDN 或中间代理可能缓存一个针对某 Origin 的响应,并错误地复用于其他 Origin 请求——导致本不该被允许的跨域访问意外成功。
实操建议:
- 对同一接口,分别用
Origin: https://a.com和Origin: https://b.com请求,观察两次响应的Access-Control-Allow-Origin值是否不同 - 若不同,再检查响应头中是否存在
Vary: Origin - 若缺失,尝试清除 CDN 缓存后重复测试;也可用
curl -H "Cache-Control: no-cache"绕过本地缓存验证服务端原始行为
/api/、/v1/、/webhook/ 下所有可访问的 endpoint,比盯着登录页更有效。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










