首页 / 技术分享 / 网站安全漏洞 /
目录遍历漏洞介绍

目录遍历漏洞介绍

码不停提

2026-02-02
23 次浏览
0 条评论

目录遍历漏洞是Web开发中极为常见和危险的安全问题之一。开发者在所有涉及文件路径参数的接口中,应始终严格校验和限制输入,杜绝任何形式的路径穿越,为应用数据和系统安全构筑坚实的防线。

网站安全漏洞
目录遍历漏洞
分享:

什么是目录遍历漏洞?

目录遍历漏洞(Directory Traversal,也称为路径穿越漏洞,Path Traversal)是指 Web 应用在处理用户输入的文件路径时,未对路径参数进行严格限制和过滤,导致攻击者能够通过构造特殊路径(如 ../..\\)访问应用服务器上的任意文件。攻击者可以借此绕过权限控制,获取敏感信息甚至进一步攻击系统。


目录遍历漏洞的危害

  1. 信息泄露 攻击者可读取服务器上的敏感文件,如应用配置文件、源码、用户数据、证书密钥、系统文件(如 /etc/passwdC:\windows\system32\drivers\etc\hosts)。
  2. 助力进一步攻击 结合其它漏洞利用泄露的敏感数据进行提权、账号攻击等。
  3. 安全设置及凭据暴露 数据库连接配置、接口密钥等被泄露,系统安全边界被突破。

攻击原理举例

假设 Web 应用允许用户下载日志文件,通过如下 URL:

http://example.com/download?file=log2026.txt

如果程序直接将参数拼接到文件路径:

filepath = "/home/app/logs/" + file
with open(filepath) as f:
    return f.read()

攻击者可传递如下参数:

file=../../../../etc/passwd

最终实际访问路径变为:

/home/app/logs/../../../../etc/passwd

文件系统会解析并返回 /etc/passwd 的内容。


常见目录遍历攻击手段

  • 发送多个 ../..\\ 穿越多层目录
  • 使用 URL 编码(如 %2e%2e%2f 代表 ../)或双编码绕过过滤
  • 拼接合法文件类型骗过后端限制,例如 ../../../../etc/passwd.txt
  • 穿越到 Web 根目录或系统目录读取源代码、配置、密码等文件

常见受影响的场景

  • 图片、文档、附件下载接口
  • 日志查看、导出功能
  • 静态文件访问、资源代理接口
  • 任意接收文件名、文件路径参数的 API

防御目录遍历漏洞的措施

  1. 限制输入文件名
    • 只允许选择白名单或数据库中的合法文件名,不允许用户直接输入路径。
    • 禁止出现 ../\/%2e%2f%5c 等特殊字符。
  2. 使用固定、安全的目录进行文件操作
    • 所有文件操作路径强制限定在受保护的目录,拒绝绝对路径及穿越路径。
  3. 路径归一化后校验
    • 采用操作系统函数(如 os.path.normpath)规范化用户输入路径,再判断其是否位于允许的目录内。
  4. 最小化文件读取权限
    • 程序用户只具备必须目录的访问权限,防止意外读取或写入系统重要文件。
  5. 输出和错误处理不能输出敏感文件内容
    • 防止攻击者通过错误信息发现目录结构和敏感文件路径。
  6. 日志监控和告警
    • 发现带有非法路径和穿越特征的访问请求及时报警。

代码示例:路径校验防护

import os

BASE_DIR = "/home/app/logs/"

def safe_join(base, path):
    # 路径归一化 + 检查防止越权
    final_path = os.path.normpath(os.path.join(base, path))
    if not final_path.startswith(base):
        raise Exception("路径越权!")
    return final_path

# 示例用法
try:
    user_input = "../../etc/passwd"
    fpath = safe_join(BASE_DIR, user_input)
    with open(fpath) as f:
        content = f.read()
except Exception as e:
    print("非法访问!", e)

评论区 (0)

你需要先 登录 后才能发表评论。
还没有人评论,赶快成为第一个吧。