Java中如何阻止访问".."上级目录以规避安全风险?
解决路径遍历安全问题的无手动过滤方案
用
PathAPI做路径归属验证
先把允许的根文件夹转为绝对路径并标准化,再将用户输入的路径片段解析到该根路径下,最后检查解析后的路径是否以根路径为前缀。示例代码:Path allowedRoot = Paths.get("/your/allowed/folder").toAbsolutePath().normalize(); Path resolvedPath = allowedRoot.resolve(userProvidedPath).normalize(); if (!resolvedPath.startsWith(allowedRoot)) { throw new SecurityException("禁止访问该路径"); }这个方法会自动处理
../这类相对路径,不用手动过滤特殊字符,从根源上避免路径遍历。依赖操作系统权限控制
让运行程序的系统账号仅拥有目标文件夹的读写权限,即便路径遍历逻辑出现疏漏,操作系统层面也会拦截对受限文件的访问。这是兜底的安全措施,建议和代码验证配合使用。禁止直接拼接路径字符串
全程使用Path类的方法处理路径(比如resolve()),不要用字符串拼接生成路径,能减少路径注入的风险。
内容的提问来源于stack exchange,提问作者NGS
相关产品推荐
相关产品推荐

