java中接收前端传递的文件名,后端通过文件名拼接个路径,存在路径穿越,如何修复,具体代码
时间: 2024-10-11 09:07:42 浏览: 32
在Java中处理前端传递的文件名并避免路径穿越(Path Traversal Attack),你需要对用户输入进行严格的验证和规范化。这种攻击通常发生在当程序将用户的相对路径附加到一个固定的服务器路径时,恶意用户可能会利用此漏洞访问不应他们访问的文件。
以下是一个简单的示例,展示了如何使用`java.io.File`类以及一些安全性检查:
```java
import java.io.File;
import java.util.Arrays;
public class FileUploadHandler {
private static final String BASE_DIR = "/path/to/server/upload/folder"; // 假设这是安全的上传目录
public void handleFileUpload(String fileName) throws IOException {
// 检查文件名是否为空或仅包含允许的字符
if (fileName == null || !isValidFileName(fileName)) {
throw new IllegalArgumentException("Invalid file name");
}
// 将用户提供的部分替换为服务器指定的部分
// 使用File#separator代替通配符或其他特殊字符防止路径解析错误
String sanitizedPath = sanitizePath(fileName);
File uploadedFile = new File(BASE_DIR + sanitizedPath);
// 写入文件等操作...
}
// 验证函数
private boolean isValidFileName(String fileName) {
// 可能的检查点:
// - 文件名长度限制
// - 是否只包含字母、数字、点(".")、斜线("/")和下划线("_")
// - 不允许开头和结尾有"/"或".."
return Arrays.stream(fileName.split("\\W+"))
.noneMatch(pathElement -> pathElement.isEmpty() || pathElement.equals("/") || pathElement.equals(".."));
}
// 用于规范化并移除危险字符的函数
private String sanitizePath(String fileName) {
return fileName.replace("*", "").replace("~", "").replaceAll("\\/", File.separator); // 更改其他需要过滤的字符
}
}
```
在这个例子中,我们假设`BASE_DIR`是一个安全的、受保护的目录,不允许直接访问。`isValidFileName()`函数可以进一步定制验证规则,例如限制文件名长度或禁止特定字符。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![java](https://img-home.csdnimg.cn/images/20250102104920.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)