Absolute Path Traversal (APT) 是一种常见的安全漏洞,攻击者可以通过该漏洞访问应用程序的文件系统中的文件,
包括敏感信息,从而可能导致应用程序遭受攻击。

一、使用专门的文件访问库,例如 Apache Commons IO 库中的 FileUtils 类

1. File文件修改

maven引入包

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</groupId>
<version>2.4</version>
</dependency>

File、FileInputStream 和 FileOutputStream 文件修改

import org.apache.commons.io.FileUtils;

File file = new File("xxx/xx/test.txt");
FileInputStream input = new FileInputStream(file);
FileOutputStream output = new FileOutputStream(file);
// TODO 改为 
File file = FileUtils.getFile("xxx/xx/test.txt");
FileInputStream input = FileUtils.openInputStream(file);
FileOutputStream output = FileUtils.openOutputStream(file);

二、使用 Java 7 或更高版本中提供的 Path 和 Files 类,它们提供了更加安全的文件访问方法。

2. BufferReader 和 BufferWriter修改

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths; BufferReader reader = new BufferReader(new File("path/to/text.txt"));
BufferWriter writer = new BufferWriter(new File("path/to/text.txt"));
// TODO 改为
Path readerPath = Paths.get("path/to/text.txt");
BufferReader = Files.newBufferedReader(readerPath);
Path writerPath = Paths.get("path/to/text.txt");
BufferWriter = Files.newBufferedWriter(writerPath);

3.FileReader 和 FileWriter修改

FileReader reader = new FileReader(new File("path/to/text.txt"));
Filewriter Writer= new FileWriter(new File("path/to/text.txt"));
// TODO 改为
Path readerPath = Paths.get("path/to/text.txt");
FileReader reader = new FileReader(readerPath.toFile());
Path writerPath = Paths.get("path/to/text.txt");
Filewriter Writer= new FileWriter(writerPath.toFile());

二、白名单法

以下是使用 Java 的文件输入流和输出流的代码示例,使用白名单检查文件路径是否合法,防止 APT 漏洞:

import java.io.*;
import java.util.ArrayList;
import java.util.List; public class APTExample {
private static final List<String> ALLOWED_PATHS = new ArrayList<>(); static {
// 添加允许访问的路径
ALLOWED_PATHS.add("/path/to/allowed/folder");
ALLOWED_PATHS.add("/path/to/another/allowed/folder");
} public static void main(String[] args) {
// 定义文件路径
String filePath = "/path/to/forbidden/folder/file.txt"; // 检查文件路径是否在允许的范围内
if (!isPathAllowed(filePath)) {
throw new SecurityException("文件路径不合法");
} try (FileInputStream fis = new FileInputStream(filePath);
FileOutputStream fos = new FileOutputStream("/path/to/destination/folder/newfile.txt")) { // 读取并写入文件
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
// 处理异常
e.printStackTrace();
}
} private static boolean isPathAllowed(String path) {
// 检查文件路径是否在允许的范围内
for (String allowedPath : ALLOWED_PATHS) {
if (path.startsWith(allowedPath)) {
return true;
}
}
return false;
}
}

在上面的示例中,ALLOWED_PATHS 列表包含允许访问的文件路径,isPathAllowed() 方法检查给定的文件路径是否在允许的范围内,如果不在范围内,则抛出一个 SecurityException。

在 main() 方法中,检查给定的文件路径是否允许访问,如果通过检查,则使用 FileInputStream 读取文件,并使用 FileOutputStream 写入文件。

例如使用安全的 API,如 Java 的 java.nio.file 包。

Absolute Path Traversal 错误解决的更多相关文章

  1. File already exists: filesystem '/path/file', transaction svn常见错误解决方法

    前言 多人任务基本都会用到SVN,于是提交的时候如果不先更新在提交或者操作顺序不对,会经常出现错误,其中File already exists: filesystem这个就是个常见问题,上网找了半天没 ...

  2. Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决

    Atitit.404错误解决标准流程and 错误resin4 resin chinese char path 404 err解决 1. #原因解析 1 2. #解决方式 2 3. 输出图片流... 2 ...

  3. php安装 出现Sorry, I cannot run apxs. ***错误解决方法

    # tar zvxf php-5.1.2.tar.gz# cd php-5.1.2# ./configure --prefix=/usr/local/php --with-mysql=/usr/loc ...

  4. Hadoop - Mac OSX下配置和启动hadoop以及常见错误解决

    0. 安装JDK 参考网上教程在OSX下安装jdk 1. 下载及安装hadoop a) 下载地址: http://hadoop.apache.org b) 配置ssh环境 在terminal里面输入: ...

  5. CAS SSO:汇集配置过程中的错误解决方法

    本教程为gevin.me原创文章,转载请注明: CAS SSO:配置过程中的错误解决方法 | Gevin’s Blog 本文将收集在配置CAS SSO遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...

  6. ubuntu错误解决。

    ubuntu中出现如下错误: W: Failed to fetch http://cn.archive.ubuntu.com/ubuntu/dists/precise-backports/main/i ...

  7. go: GOPATH entry is relative; must be absolute path: "".

    安装:vscode-go出现以下提示: go: GOPATH entry is relative; must be absolute path: "".Run 'go help g ...

  8. No plugin found for prefix 'tomcat' in the current project and in the plugin groups和java.net.BindException: Address already in use: JVM_Bind <null>:8080的错误解决

    错误报告:No plugin found for prefix 'tomcat' in the current project and in the plugin groups [org.apache ...

  9. Windows Unity ARKit发布到IOS相关设置及错误解决

    Windows 版Unity安装: 考虑到在虚拟机中运行Unity比较卡,所以采用在Windows Unity上将项目发布好然后再复制到Mac虚拟机中通过XCode进行编译的方式. Unity版本为 ...

  10. Maven项目错误解决小结

    http://blog.csdn.net/typa01_kk/article/details/49185759 Maven项目错误解决小结 注:整理错误,不喜欢为了一个小问题,占篇幅,所以请Ctrl+ ...

随机推荐

  1. 【python】pip的问题

    在更新pip的时候因为安装pip需要管理员权限,但是呢,又把pip给uninstall了 所以结果就是没有pip这个模块了 https://stackoverflow.com/questions/18 ...

  2. Mac连接交换机

    接上免驱动的绿联,可以看到有一个usb串口设备: ls /dev/tty.* /dev/tty.Bluetooth-Incoming-Port /dev/tty.usbserial-AB0LU5PY ...

  3. Camstar报错:cannot be accessed through null object reference at CDO 'xxx'

  4. 【服务器数据恢复】RAID6数据恢复案例

    服务器数据恢复环境:一台Web服务器中有一组由8块磁盘组建的raid6磁盘阵列,用来运行数据库和存储普通办公文件. 服务器故障:服务器raid6磁盘阵列中有两块硬盘离线,但是管理员没有注意到这种情况, ...

  5. 使用ADB拷贝Android设备的文件夹

    在当前目录下执行,拷贝到当前目录.   拷贝照片 adb pull sdcard/DCIM   删除照片 adb shell rm -rvf sdcard/DCIM   拷贝图片 adb pull s ...

  6. 由Restart()想到的

    官方文档: Application.Restart Method (System.Windows.Forms) | Microsoft Docs 目录 Restart 探索 结论 启示 Restart ...

  7. (Yocto)Imx8mp的时间结构

    1.构成图 #kernel\time\timekeeping.c #drivers\rtc\class.c 1.time date source 解释       rx8010sj: 自己定制的开发板 ...

  8. 双CAN通讯模板

    本文中CAN1采用16位掩码,CAN2只能使用大于等于14的筛选器组,根据手册只能使用32位的掩码(因为大于14的筛选器没有说明). 经测试,STM32手册中的筛选器配置图错误,库函数的命名正确.参考 ...

  9. zookeeper 选举流程源码解析

    在开始之前,我们先了解一下zookeeper集群角色,zookeeper中存在leader,follower, observer这么几个角色, leader, follower, 就类似与mysql ...

  10. PowerShell学习笔记一_cmdlet、管道、如何入门

    PowerShell文件: .ps1 脚本文件 .psm1 模块文件 .psd1 模块描述文件 cmdlet(命令行) 组成: 动词-名词,例如: 1. Get-Service(获取所有服务),类似于 ...