1. 简介

路径遍历攻击(Path Traversal Attack)是一种常见但极具破坏力的安全漏洞。它利用应用程序中对文件或目录访问控制的疏漏,试图访问系统中本不应被公开访问的文件或目录。攻击者可以借此读取应用源码、敏感数据,甚至操作系统关键文件,例如 /etc/passwd

这类攻击在 Web 应用、文件下载接口、上传解压功能中尤为常见。接下来我们将从攻击原理、常见手法、防御策略等方面深入分析。


2. 路径遍历漏洞原理

简而言之,攻击者的目的是访问本不应被允许访问的文件系统路径。这可能包括:

✅ 读取敏感文件(如配置文件、密码文件)
✅ 修改文件内容(如上传恶意文件)
✅ 注入后门程序或创建新用户账户

常见攻击方式

攻击通常通过构造特殊路径参数实现,例如:

http://www.somecompany.com/someapp/download?file=../../../../../../etc/passwd

这个例子中,攻击者使用 ../ 序列尝试访问 Web 根目录之外的系统文件。在 Linux 中,../ 表示“返回上一级目录”,Windows 中则为 ..\。这种攻击也被称为 dot-dot-slash 攻击

路径绕过编码技巧

为了绕过简单的过滤逻辑,攻击者常常对路径进行编码混淆,例如:

  • . 可以用 %2e%252e(双编码)、%c0%ae(UTF-8 编码)
  • / 可以用 %2f%252f%c0%af
  • \ 可以用 %5c%255c%c1%9c
  • : 可以用 %3a%253a%c0%3a

这类编码方式会绕过一些简单字符串匹配的过滤机制。

其他攻击场景

除了 HTTP 接口,路径遍历也可能出现在:

✅ ZIP 文件解压(如未处理文件名中的 ../
✅ 本地文件读取功能(如日志查看器)
✅ 文件上传功能(上传后被服务端执行)


3. 防御路径遍历攻击

路径遍历是勒索软件攻击的常见入口之一。攻击者通过上传恶意代码、修改应用逻辑,诱导服务器执行恶意脚本。因此,我们必须采取有效手段进行防御。

推荐防御策略

避免直接使用用户输入作为文件路径

  • 不要将用户输入拼接到文件操作路径中,尤其是 java.io.FileFileInputStreamFileOutputStream 等 API 的使用

限制应用权限

  • 应用应以最小权限运行,仅能访问必要的路径
  • 使用受限账户启动服务,避免使用 root 或管理员权限

使用 chroot 限制文件访问范围

  • 通过 chroot 将应用限制在一个“虚拟根目录”中,防止访问外部文件系统

严格验证用户输入

  • 对文件名进行白名单校验(如只允许字母、数字、下划线)
  • 拒绝包含 ../..\%2e%2f 等可疑字符的输入
  • 解码后再次校验(防止多层编码绕过)

使用安全库处理路径

  • Java 中可使用 java.nio.file.Paths.get() + normalize() 检查路径是否越界
  • 使用 java.nio.file.Files.isSameFile() 判断目标路径是否在允许目录下

示例:Java 中路径安全处理

import java.nio.file.*;

public class FilePathValidator {
    private static final Path BASE_DIR = Paths.get("/safe/uploads").toAbsolutePath();

    public static Path validatePath(String userInput) throws Exception {
        Path targetPath = BASE_DIR.resolve(userInput).normalize();
        if (!targetPath.startsWith(BASE_DIR)) {
            throw new SecurityException("Invalid path: attempted path traversal");
        }
        return targetPath;
    }
}

这段代码确保用户输入的路径不会超出 /safe/uploads 目录范围。


4. 总结

路径遍历漏洞虽然原理简单,但破坏力极强。一个未验证的文件名参数就可能造成整个系统沦陷。攻击者通过编码绕过、文件上传、压缩包解压等方式,不断寻找突破口。

作为开发人员,我们应当时刻警惕用户输入,不要相信任何外部输入。通过严格的输入校验、权限控制、路径限制等手段,可以有效防范路径遍历攻击。

核心防御原则:永远不要直接使用用户输入作为路径
最小权限 + 输入校验 + 安全 API + 安全编码习惯 = 安全基础


原始标题:What Are File Path Transversal Attacks?

« 上一篇: GUID 介绍