第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
2026/6/9 21:22:21
W3C 的 CORS 规范和各大安全审计标准(如 OWASP)都明确指出:
🛡️ 核心原因:防止敏感数据泄露
当你配置allowedOriginPatterns("*")并且允许凭据(allowCredentials=true)时,你实际上是在告诉浏览器:
“任何网站都可以向我的服务器发送请求,并且可以携带用户的登录信息(Cookie)。”
这会带来严重的安全隐患:
如果生产环境允许所有域名(*)携带凭据访问,攻击者可以制作一个恶意网页(例如通过钓鱼邮件诱导你打开):
*,浏览器会允许这个跨域请求,并自动带上你的 Cookie。服务器收到请求后,误以为是你本人在操作,就会返回敏感数据(如用户资料、订单信息等)给恶意网站。Access-Control-Allow-Credentials: true时,Access-Control-Allow-Origin绝对不能是*。为了让你更直观地看到代码是如何变成 HTTP 协议的,整理了这个对应表:
| 你的代码配置 | 生成的 HTTP 响应头 | 作用说明 |
|---|---|---|
.allowedOriginPatterns("*") | Access-Control-Allow-Origin: * | 允许任何域名访问资源 |
.allowedMethods("GET", "POST"...) | Access-Control-Allow-Methods: ... | 告诉浏览器允许使用的 HTTP 动词 |
.allowedHeaders("*") | Access-Control-Allow-Headers: ... | 允许请求中携带的自定义头字段 |
.allowCredentials(true) | Access-Control-Allow-Credentials: true | 允许携带 Cookie 或认证信息 |
.maxAge(3600) | Access-Control-Max-Age: 3600 | 预检请求缓存 1 小时,减少重复 OPTIONS 请求 |
WebMvcConfigurer配置全局跨域@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE"); } }*通配符allowedOriginsallowedHeaders精细化控制