
截图中的漏洞“跨域资源共享 (CORS)”核心问题是服务器当前配置了Access-Control-Allow-Origin: *这意味着允许任何网站跨域请求你的资源存在数据泄露风险--1。修复的核心原则是从“允许所有”改为“只允许信任的来源”--4。 修复方案根据你的技术栈有以下几种常见的修复方式方案一Nginx 反向代理层修复推荐无需改代码如果你的网站使用了 Nginx 作为反向代理这是最直接的方式。核心思路不再无条件返回*而是通过$http_origin变量获取请求的来源并与一个受信域名白名单进行匹配-24-27。只有匹配成功才返回对应的Origin值。配置示例server { listen 80; server_name your-domain.com; location / { # 1. 定义一个白名单变量初始为空 set $allow_origin ; # 2. 检查请求的 Origin 是否在白名单内 # 这里以允许 your-domain.com 和 app.your-domain.com 为例 if ($http_origin ~* ^https://(your-domain\.com|app\.your-domain\.com)$) { set $allow_origin $http_origin; } # 3. 只有白名单内的 Origin才会返回对应的 CORS 头 add_header Access-Control-Allow-Origin $allow_origin; # 4. 处理预检请求 (OPTIONS) if ($request_method OPTIONS) { add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization; add_header Access-Control-Max-Age 1728000; add_header Content-Type text/plain; charsetutf-8; add_header Content-Length 0; return 204; } # ... 你的其他配置如 proxy_pass proxy_pass http://your-backend; } }关键点说明白名单控制if ($http_origin ~* ^https://(your-domain\.com|app\.your-domain\.com)$)这行代码是关键它会精确匹配你允许的域名-27。动态返回只有Origin在白名单中Access-Control-Allow-Origin才会被设置为该Origin的值-27。预检请求OPTIONS请求的处理必不可少它负责告知浏览器服务器支持哪些跨域方法和头信息-24。修改后验证执行nginx -t检查配置语法然后执行nginx -s reload使配置生效-24。方案二后端代码层修复Spring Boot 示例如果你的后端是 Java Spring Boot 应用可以直接在代码中配置。全局配置推荐创建一个配置类通过WebMvcConfigurer进行全局 CORS 设置-。import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) // 对所有路径生效 .allowedOrigins( // ⚠️ 关键这里只放行你信任的域名 https://your-domain.com, https://app.your-domain.com ) .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) // 允许的请求方法 .allowedHeaders(*) // 允许的请求头 .allowCredentials(true) // 是否允许携带 Cookie .maxAge(3600); // 预检请求缓存时间 } }关键点说明杜绝通配符allowedOrigins(...)中必须明确列出你信任的域名绝不能使用allowedOrigins(*)-。安全冲突一旦设置allowCredentials(true)允许携带CookieallowedOrigins就不能包含通配符*必须指定具体域名-。Spring Security 冲突如果你的项目同时使用了 Spring Security需要在 Security 配置中显式启用 CORS否则WebMvcConfigurer的配置可能被覆盖-。️ 如何验证修复效果完成修复后可以通过以下方式验证浏览器开发者工具验证打开浏览器开发者工具 (F12) - Network 面板。刷新页面查看任意一个请求的Response Headers。确认Access-Control-Allow-Origin的值是你配置的具体域名而不是*。使用 curl 命令模拟测试# 用一个不在白名单的 Origin 测试响应头中不应包含 Access-Control-Allow-Origin curl -I -H Origin: https://evil.com https://www.dakoin.com/html/ # 用一个在白名单的 Origin 测试响应头中应包含对应的 Access-Control-Allow-Origin curl -I -H Origin: https://your-domain.com https://www.dakoin.com/html/重新进行漏洞扫描修复后建议重新运行安全扫描工具如 Burp Suite确认漏洞已被修复-1。 总结与关键提醒处理这个漏洞请务必遵守以下安全原则拒绝通配符生产环境严禁使用Access-Control-Allow-Origin: *-2。拒绝null同样不要将Access-Control-Allow-Origin设置为null这同样存在安全风险--4。拒绝动态回显绝不能不做任何校验直接将请求头中的Origin值设置到响应头中-4。白名单原则只允许确切知道且信任的域名进行跨域访问-。配置Vary: Origin建议在响应中添加Vary: Origin头以告知缓存服务器根据请求的Origin来区分缓存避免缓存投毒问题-。