You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在JRE层面阻止含../模式的目录遍历攻击?

JRE层面阻止目录遍历攻击的内置机制与最佳实践

问题背景

希望在JRE层面阻止含../的目录遍历攻击,无需依赖Java代码中的显式路径校验与清理操作。已观察到:

  • Java Security Manager可控制文件访问,但无法直接阻止/清理../序列;
  • 文件权限与安全策略能限制访问范围,但不会主动清理路径;
  • 未找到JRE配置中针对../模式的防护选项。

问题解答

  1. JRE中是否存在内置机制可自动阻止或清理含../模式的文件路径?
    没有。Java的文件API(包括传统File类和NIO的Path API)会按照文件系统规范解析../序列,JRE本身不会主动拦截或清理这类路径——这是为了兼容合法的路径导航需求,因此不存在内置的自动阻止/清理机制。

  2. 是否有JRE配置、系统属性或设置可在底层缓解目录遍历攻击,无需代码层面校验?
    没有专门针对../模式的JRE配置或系统属性,但可以通过Java Security Manager的策略配置间接缓解:

    • 开启Security Manager(JDK 17及以后需手动指定-Djava.security.manager=allow);
    • 在安全策略文件(java.policy)中严格限制程序的文件访问范围,例如只允许访问指定目录:
      grant {
          permission java.io.FilePermission "/opt/app/data/**", "read,write";
      };
      
      这种情况下,即使路径包含../试图跳出授权目录,JRE会直接抛出SecurityException阻止访问。
  3. 若不存在此类机制,除应用代码校验外,JRE层面的文件路径安全最佳实践有哪些?

    • 严格配置Security Manager策略:最小化文件访问权限,仅授予程序必要的目录读写权限,从权限层面阻断越权访问;
    • 利用Java模块化(Java 9+):在module-info.java中通过requires和opens指令限制模块的文件系统访问范围,例如仅开放特定包给文件系统操作;
    • 自定义SecurityManager实现:继承SecurityManager,重写checkRead()、checkWrite()等方法,添加路径合法性校验(比如检查规范化后的路径是否在允许范围内),并通过-Djava.security.manager指定自定义实现;
    • 使用受限文件系统:通过NIO的FileSystemProvider创建自定义的受限文件系统,将程序的文件操作限制在指定根目录内,自动拦截越权的路径导航;
    • 禁用危险API:在安全策略中禁止使用可能绕过路径校验的API(如Runtime.exec()执行系统命令操作文件),减少攻击面。

内容的提问来源于stack exchange,提问作者Sakthis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:53:17