React应用被Netsparker检出Web Cache Deception漏洞的响应规则咨询
Web Cache Deception漏洞场景响应方案
核心问题答案
- 该场景下不能返回200状态码的空白页面,正确响应是返回
404 Not Found(资源不存在)或400 Bad Request(非法请求),同时保留现有的Cache-Control: no-store, no-cache等防缓存头配置。 - 你当前的200空白页逻辑正是扫描工具告警的触发原因:即使当前空白页无敏感信息,若后续路由逻辑调整,这类追加静态后缀的非法路径可能返回用户私有页面内容,搭配缓存服务器的激进后缀缓存策略就会引发真实的敏感信息泄露。
漏洞原理回顾
攻击者会获取站点动态页面链接,比如用户设置页地址
https://example.com/settings.php,在末尾追加带静态文件扩展名的路径,伪装成静态样式表或图片资源。
攻击者将篡改后的链接发送给受害者,受害者访问时会携带自身Cookie。缓存服务器收到类似https://example.com/settings.php/stylesheet.css的请求时,会按URL后缀识别为静态样式表。如果缓存服务器开启了激进缓存策略,可能会忽略应用返回的Cache-Control头,对所有.css后缀的文件强制使用public缓存指令,即使用户私有页面内容也会被缓存给所有站点访问者,引发敏感数据泄露。
本次扫描的验证请求为:
https://app.com/myapp//ns.css
你当前返回的200响应符合漏洞的触发特征:即使返回空白页,也满足"动态路径追加静态后缀后返回200响应"的判定规则。
具体修复方案
1. 路由逻辑修复(双保险配置)
- React应用层:所有不匹配的路由直接关联404页面,不要返回200状态码的兜底空白页。如果是SSR渲染的React项目,需要在服务端路由层直接设置404状态码;如果是CSR静态部署项目,需要在Web服务器层补充规则:
- 先校验请求路径对应的静态资源是否真实存在,不存在的静态后缀请求直接返回404,不要转发到React入口的index.html
- 新增路径规范化逻辑,自动清理路径中的双斜杠
//,避免异常路径绕过校验
2. 缓存策略加固
- 确认CDN/反向代理缓存服务器不会全局按URL后缀匹配缓存规则,仅对真实存放在静态资源目录下的文件开启后缀缓存。
- 禁止缓存服务器覆盖
text/html类型响应的Cache-Control头,所有动态页面的缓存规则完全遵循应用返回的头配置。
3. 额外校验(可选)
对需要登录的私有路径,新增请求头校验逻辑:如果请求的Accept头明确要求静态资源类型(如text/css、image/*),但实际返回内容为text/html,直接返回400错误拦截请求。
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

