OWASP 类别: MASVS-STORAGE: 存储
概述
当攻击者可以控制一部分路径,然后在未经验证的情况下将其传递给文件系统 API 时,就会出现路径遍历漏洞。这会导致未经授权的文件系统操作。例如,攻击者可能会使用 ../
等特殊字符来意外更改资源目标,通过遍历目标目录之外的目录。
影响
影响取决于操作和文件内容,但通常会导致文件覆盖(写入文件时)、数据泄露(读取文件时)或权限更改(更改文件/目录权限时)。
缓解措施
使用 File.getCanonicalPath()
将路径规范化,并将前缀与预期目录进行比较
Kotlin
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
Java
public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
File f = new File(path);
String canonicalPath = f.getCanonicalPath();
if (!canonicalPath.startsWith(expectedDir)) {
throw new IllegalArgumentException();
}
return f;
}
另一种最佳实践是使用验证来确保仅发生预期结果。以下是一些示例
- 检查文件是否存在以防止意外覆盖。
- 检查目标文件是否为预期目标以防止泄露数据或错误地更改权限。
- 检查操作的当前目录是否与规范路径返回值中预期的完全相同。
- 确保权限系统明确地限定在操作范围内,例如,检查它是否没有以 root 身份运行服务,并确保目录权限限定在指定的服务或命令范围内。
推荐给您
- 注意:当 JavaScript 关闭时,链接文本将显示
- Zip 路径遍历