首页/安全/漏洞与攻击面速查/路径穿越(目录遍历)防护
Web 漏洞原理与防护55 条

路径穿越(目录遍历)防护

路径穿越通过 ../ 或编码变体让文件操作跳出预期目录,读取或覆盖系统文件;防护核心是规范化路径后校验前缀(或改用文件 ID 映射),而不是简单替换 ../。

漏洞与攻击面速查安全更新于 2026-10-12

安全实现示意(Python)

安全实现示意(Python)
import os
BASE = os.path.realpath('/srv/files')
name = os.path.basename(user_input)            # 先剥离路径成分
target = os.path.realpath(os.path.join(BASE, name))
if not target.startswith(BASE + os.sep):
    raise PermissionError('path out of base')
# 更稳的做法:文件名与数据库 ID 映射,磁盘文件使用 UUID 命名
多轮编码(%2e%2e%2f 等)会在框架解码后变成 ../;校验必须发生在解码之后、文件系统调用之前。

易错点

  • 只在 URL 层替换一次 ../ 就放行:双重编码与 Windows 反斜杠变体可绕过
  • 前缀校验未加分隔符:/srv/files2 会被误判为 /srv/files 前缀

数据来源与参考

  • OWASP Path Traversal 说明
  • OWASP WSTG 路径穿越测试章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌