近年来,随着Web前端技术的飞速发展,越来越多的数据请求和处理逻辑被转移到客户端(浏览器)执行。这大大提升了用户体验,但也带来了新的安全威胁。其中,Client-Side Path Traversal(客户端路径穿越,CSPT)作为一种新兴的漏洞类型,逐渐受到安全研究者和攻击者的关注。本文将系统介绍CSPT的原理、检测方法、绕过WAF的技巧,并提出防护建议,帮助读者深入理解该漏洞并提升防御能力。

一、CSPT漏洞原理详解
1.1 什么是Client-Side Path Traversal?
路径穿越(Path Traversal)原本是指攻击者利用Web服务器未正确处理路径参数,从而访问本不应该开放的服务器文件。而Client-Side Path Traversal(CSPT)则是指发生在客户端(通常是浏览器端JS代码)对路径参数未做严格校验时,导致攻击者可以通过构造诸如../
等特殊字符串,影响客户端发起的请求路径,实现跨目录甚至跨站点的数据访问、CSRF或XSS等攻击。
CSPT也常被称为"On-site Request Forgery"(站内请求伪造),本质上是攻击者控制了前端代码执行的请求路径,通过路径穿越让浏览器自动携带认证信息,发起敏感操作。
通俗理解
- 服务器端路径穿越:攻击者通过
../../
访问如/etc/passwd
等本地敏感文件。 - 客户端路径穿越:攻击者通过
../
等方式控制前端JS发起的请求路径,间接访问敏感资源或触发漏洞。
1.2 CSPT的典型利用链
CSPT漏洞的典型流程如下:
- 攻击者向目标页面注入特定参数(如
newsitemid=../pricing/default.js?cb=alert(1)//
)。 - 前端JS代码未对该参数做路径校验,直接拼接到请求路径上。
- 浏览器自动发起请求(如fetch、XMLHttpRequest),并自动携带Cookies、Token等身份凭证。
- 请求被路由到本不应由用户控制的文件或API端点,触发CSRF、XSS、信息泄露等后果。
实例分析
假设有这样一段前端JS代码:
javascript
fetch(`/newsitems/${newsitemid}`)
.then(resp => resp.text())
.then(data => renderContent(data));
攻击者构造如下URL访问:
vbnet
https://example.com/static/cms/news.html?newsitemid=../pricing/default.js?cb=alert(document.domain)//
此时,fetch实际请求的是:
scss
/pricing/default.js?cb=alert(document.domain)//
如果default.js
的内容被当作HTML渲染,或其回显未做过滤,即可造成XSS。
1.3 CSPT的攻击点与危害
CSPT的危害主要体现在:
- CSRF增强:即使有CSRF Token防护,CSPT也可能突破(因为Token由浏览器自动加入)。
- 绕过SameSite Cookie:部分场景下,CSPT能让SameSite=Lax的Cookie照常被带上。
- 多种HTTP方法支持:不仅限于GET,还可能影响PATCH/PUT/DELETE等操作。
- 一键攻击:用户只需点击一次恶意链接即可触发复杂的CSRF链路。
二、CSPT漏洞检测与利用技术
2.1 检测思路
CSPT漏洞的检测主要包括以下几个步骤:
- 寻找参数注入点:分析前端页面中的动态请求接口,定位参数可控点。
- 路径穿越测试 :构造如
../
、..%2F
等payload,观察前端请求是否被重定向到意外路径。 - 响应回显分析:检测是否存在内容泄露、敏感API请求、XSS/CSRF等后续漏洞。
- 自动化工具辅助:利用Burp插件等自动化工具批量检测。
2.2 工具推荐
- CSPTBurpExtension:由doyensec开发的Burp Suite扩展,支持自动发现和利用CSPT漏洞。
- CSPTPlayground:开源靶场,适合安全研究人员学习、验证CSPT漏洞。
2.3 检测技巧
步骤一:静态分析
- 检查前端代码(JS),关注所有fetch、XMLHttpRequest、动态import、iframe src等路径拼接点。
- 重点关注参数未经过滤直接拼接到请求路径的场景。
步骤二:动态调试
- 在浏览器开发者工具中,尝试修改路径参数,观察发起的XHR请求目标是否被影响。
- 构造路径穿越payload,例如:
bash
newsitemid=../../../../api/v4/caches/invalidate
- 观察是否能访问到非预期的接口或资源。
步骤三:利用验证
- 如果发现可以访问到敏感API接口,尝试进一步构造CSRF或XSS利用链。
- 检查响应内容中是否包含敏感信息或可控脚本。
步骤四:工具自动化
- 配置CSPTBurpExtension,在渗透测试过程中批量扫描CSPT注入点。
- 结合CSPTPlayground进行漏洞复现和安全方案测试。
三、绕过WAF的高级技巧
随着WAF的普及,很多路径穿越攻击会被直接拦截。针对CSPT,攻击者常用的绕过技术包括:
3.1 编码绕过
- 利用URL编码(如
..%2F
、..%252F
)对../
进行多重编码,部分前端或后端解析器会先解码后再拼接路径。 - 利用Unicode编码(如
..%u2215
),部分浏览器/JS引擎可能将其还原为斜杠。
3.2 目录分隔符混淆
- 混合正斜杠
/
与反斜杠\
,适配不同操作系统下的解析差异。 - 例如:
..\/..\/
或..\\..\\
3.3 空白填充与无害字符插入
- 在
../
之间插入点号、空格或其他无害字符(如..;/
、.%00./
),部分解析器会自动归一化这些字符。
3.4 利用前端路由逻辑差异
- 前端路由器(如React Router、Vue Router)与后端路由规则不同步时,攻击者可利用前端未过滤但后端允许的路径拼接方式,穿越目录。
3.5 结合文件上传或其他功能链
- 通过上传恶意文件后,利用CSPT控制前端去请求该文件,实现任意代码执行或信息泄露。
实例:多级编码绕过
假设有如下前端拼接逻辑:
javascript
let url = '/api/items/' + encodeURIComponent(itemid);
fetch(url);
此时,攻击者可尝试:
perl
itemid=..%252F..%252Fadmin%252Fconfig
前端解码为../..//admin/config
,若未做二次校验,则可访问敏感配置文件。
四、CSPT的危害
4.1 危害总结
- 突破CSRF防护:借助前端自动携带token,实现原本无法完成的CSRF攻击。
- 信息泄露:通过路径穿越访问敏感文件、配置或API接口。
- XSS攻击:绕过前后端校验,注入恶意脚本,提升攻击链复杂度。
- 权限提升:通过访问本不应暴露的接口,实现越权操作。
五、防护建议
5.1 前端防护措施
- 严格参数校验 :前端在拼接请求路径前,必须对用户输入的参数进行白名单校验,禁止出现
../
、..%2F
等穿越特征。 - 合理使用encodeURIComponent:对所有路径型参数进行安全编码,避免特殊字符被解释为目录。
- 最小权限原则:前端只暴露必要的API和资源路径,隐藏管理、敏感接口。
5.2 后端配合防御
- 路径归一化检查 :后端对所有路径型参数进行归一化处理(如去除
../
),校验访问路径是否落在允许目录下。 - CSRF Token二次验证:敏感操作强制要求后端校验CSRF Token,不依赖前端自动携带。
- 权限校验补充:即使请求来源为同域,也要做严格的权限判断。
5.3 WAF与监控
- WAF规则更新:及时关注CSPT相关攻击手法,更新WAF规则,检测并拦截多种编码、穿越尝试。
- 异常请求日志分析:对频繁出现路径穿越特征的请求进行告警,及时响应。
六、总结
Client-Side Path Traversal作为新兴的前端安全威胁,突破了传统CSRF、XSS防御思路,给Web安全带来了新的挑战。只有前后端协同、严格校验输入、持续更新检测与防护手段,才能有效应对这一漏洞带来的风险。安全从业者和开发者应高度重视CSPT,定期开展专项检测与培训,持续提升整体安全水平。
参考资料
- Exploiting Client-Side Path Traversal to Perform Cross-Site Request Forgery - Introducing CSPT2CSRF - Maxence Schmitt - 2024.07.02
- Exploiting Client-Side Path Traversal - CSRF is dead, long live CSRF - Whitepaper
- Bypassing WAFs to Exploit CSPT Using Encoding Levels - Matan Berson - 2024-05-10
- CSPT the Eval Villain Way! - Dennis Goodlett - 2024-12-03
- Bypassing File Upload Restrictions To Exploit Client-Side Path Traversal - Maxence Schmitt - 2025-01-09
- doyensec/CSPTBurpExtension
- doyensec/CSPTPlayground