在当今的网络安全环境中,目录遍历漏洞(Path Traversal Vulnerability) 依然是Web应用中最常见且高危的安全隐患之一。攻击者通过构造特殊路径,绕过服务器限制,读取系统敏感文件(如 /etc/passwd、.env 配置文件等),甚至上传恶意文件实现远程代码执行。作为开发者或安全运维人员,掌握其原理与防御方法至关重要。

本文将深入剖析目录遍历漏洞的成因、攻击手法,并提供实用、可落地的防御方案,帮助你有效抵御此类威胁。
什么是目录遍历漏洞?
目录遍历,又称路径遍历,是指攻击者利用Web应用程序对用户输入的文件路径未做充分校验或过滤,从而访问到本不应被访问的服务器文件系统目录或文件。
核心原理
当Web应用根据用户输入动态拼接文件路径时,若未对输入内容进行安全过滤,攻击者便可使用 ../(上级目录)或 ./(当前目录)等路径跳转符,突破应用设定的目录边界,访问任意文件。
经典漏洞代码示例:
攻击Payload:
实际访问路径:
这将直接导致Linux系统用户密码文件被读取,造成严重信息泄露。
目录遍历的常见攻击场景
1. 文件下载/读取功能
如图片预览、文件下载、日志查看等功能,常通过URL参数指定文件名:
若未校验,攻击者可尝试:
2. 文件上传功能中的路径穿越
上传头像时,若允许用户指定保存路径:
可能将文件上传至Web根目录,直接写入Webshell。
3. ZIP压缩包解压路径穿越
攻击者上传一个包含 ../../../../.htaccess 文件的ZIP包,解压后覆盖服务器配置文件,可能导致权限提升或代码执行。
高级绕过技术:攻击者如何突破防御?
随着安全意识提升,简单 ../ 已被多数系统拦截,但攻击者仍掌握多种绕过手段:
| 防御方式 | 绕过技术 | 示例Payload |
|---|---|---|
过滤 ../ | URL编码 | %2e%2e%2f → ../ |
| 过滤关键词 | 双重编码 | %252e%252e%252f → %2e%2e%2f → ../ |
| 过滤路径分隔符 | 使用反斜杠(Windows) | ..\..\Windows\win.ini |
| 扩展名强制校验 | 空字节截断 | ../../../etc/passwd%00.jpg |
| 路径标准化过滤 | 超长路径绕过 | ....//....//etc/passwd |
| 拦截特殊字符 | UTF-8编码绕过 | %C0%AE%C0%AE%2F → ../ |
💡 提示:
%00空字节在PHP等语言中会截断字符串,使后缀.jpg不被解析,从而绕过文件类型检查。
实战检测:如何发现目录遍历漏洞?
1. 手动测试
使用curl命令快速验证:
2. 自动化工具
Burp Suite:使用Intruder模块配合路径遍历字典进行爆破。
OWASP ZAP:内置扫描器可自动检测路径遍历。
ffuf:命令行模糊测试工具,适合批量检测。
3. 常用测试字典
终极防御方案:如何彻底防范目录遍历?
✅ 1. 输入验证 + 白名单机制(推荐)
避免直接使用用户输入的文件名。采用白名单映射:
✅ 2. 路径规范化与边界检查
使用系统函数标准化路径,并限制访问范围:
✅ 3. 统一编码与解码处理
对用户输入进行URL解码后,再进行安全校验,防止编码绕过。
✅ 4. 限制Web服务器权限
Web服务账户应使用最小权限原则,避免使用root或system权限运行。
关闭不必要的目录浏览功能(如Apache的
Options Indexes)。
✅ 5. 错误信息脱敏
禁止在错误页面中暴露服务器路径、文件结构等敏感信息,防止信息泄露。
✅ 6. 使用安全框架与库
优先使用成熟的Web框架(如Spring、Django、Laravel),它们通常内置了路径安全处理机制。
真实案例回顾
Apache HTTPd CVE-2021-41773:2.4.49版本存在路径穿越漏洞,攻击者可利用
/%2e%2e/%2e%2e/etc/passwd读取系统文件。WordPress插件漏洞:多个插件因未校验文件路径,导致配置文件、数据库凭证泄露。
安全无小事,防御需前置
目录遍历虽属“低级”漏洞,但危害极大,且在老旧系统、自研应用中仍广泛存在。最有效的防御方式是:从设计阶段就避免直接拼接用户输入路径,采用白名单或ID映射机制。
作为开发者,应时刻保持安全意识;作为安全人员,应定期进行渗透测试与代码审计。
🔐 记住:安全不是功能,而是责任。





















