构造文件的路径

import java.io.File;

/**
 * 构造文件的路径。兼容Windows和unix/linux
 * 
 * @author leo
 * 
 */
public class FilePath {

  /**
   * @param args
   */
  public static void main(String[] args) {
    String path = File.separator + "a" + File.separator + "b";
    System.out.println(path);
  }

}

 

Java 中,为了防止在 `deleteProjectDirectory` 方法使用用户提供的 `projectName` 构造文件路径时出现路径遍历漏洞,可以对 `projectName` 进行路径规范化处理。以下是一个示例代码,展示了如何实现这一过程: ```java import java.io.File; import java.io.IOException; public class DirectoryDeletion { // 预期的项目根目录 private static final String EXPECTED_ROOT_DIR = "/path/to/expected/root"; public static void deleteProjectDirectory(String projectName) { try { // 构建完整的文件路径 String fullPath = EXPECTED_ROOT_DIR + File.separator + projectName; // 创建 File 对象 File directory = new File(fullPath); // 进行路径规范化处理 String canonicalPath = directory.getCanonicalPath(); // 检查规范化后的路径是否在预期的根目录下 if (canonicalPath.startsWith(EXPECTED_ROOT_DIR)) { // 确保路径在预期目录内,执行删除操作 if (directory.exists() && directory.isDirectory()) { // 这里可以添加递归删除目录及其子目录和文件的逻辑 // 简单示例:直接删除目录 if (directory.delete()) { System.out.println("项目目录删除成功: " + projectName); } else { System.out.println("项目目录删除失败: " + projectName); } } else { System.out.println("项目目录不存在: " + projectName); } } else { System.out.println("检测到路径遍历风险,操作被拒绝: " + projectName); } } catch (IOException e) { System.out.println("处理文件路径时出现错误: " + e.getMessage()); } } public static void main(String[] args) { // 示例调用 String projectName = "validProject"; deleteProjectDirectory(projectName); } } ``` 在上述代码中,首先定义了预期的项目根目录 `EXPECTED_ROOT_DIR`。在 `deleteProjectDirectory` 方法中,将用户提供的 `projectName` 与预期根目录拼接成完整的文件路径。然后,使用 `getCanonicalPath()` 方法对路径进行规范化处理。最后,检查规范化后的路径是否以预期根目录开头,如果是,则执行删除操作;否则,拒绝操作并输出风险提示。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值