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. 05 Java 数组

    Java 数组 一.什么是数组 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的顺序排列组合而成 其中每一个数据称为数组元素,每个数组元素可以通过下标来访问它们 二.数组的声 ...

  2. 直播平台制作,Android 悬浮窗延时5秒返回APP问题

    直播平台制作,Android 悬浮窗延时5秒返回APP问题 案例需求分析:在APP界面,点击Home键后,APP退出后台,同时会打开一个悬浮窗,当用户点击悬浮窗上的按键会返回APP. 出现的问题是:点 ...

  3. Delphi 多进程共享内存的简单封装单元

    该单元转自武稀松的博客 稍作修改,使其支持Delphi7 { 共享内存封装. 封装成了MemoryStream的形式. 用法如下: var ms : TShareMemStream; ms := TS ...

  4. MyBatis_01(前置知识)

    1-学习思路(课程主要内容): 2-MyBatis特性 3- MyBatis下载 但是我们在使用MyBatis的时候,都是直接 "Maven导入MyBatis的jar包" (所以, ...

  5. 查看oracle死锁

    select A.sid, b.serial#, decode(A.type, 'MR', 'Media Recovery', 'RT','Redo Thread', 'UN','User Name' ...

  6. OTP: gen_server的简单应用

    1.确定回调模块名 2.编写接口函数 3.在回调模块里编写六个必需的回调函数 1.确定回调模块名 my_bank 2.编写接口方法 start() 打开银行 stop() 关闭银行 new_accou ...

  7. Android蓝牙固件升级 DFU-OTA 固件升级

    1.添加 依赖包: implementation 'no.nordicsemi.android:dfu:1.11.0' 2.DfuService类继承  DfuBaseService package ...

  8. shell—if + case条件语句

    if 条件语句 1. 概述 在shell的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时候也会与 if 等条件语句相结合,来完成测试判断,以减少程序运行错误. 2. ...

  9. 微信小程序JS遇到【object object 】怎么打印?js如何打印object对象

    console.log(JSON.stringify(user)):或者打印的时候直接 console.log(user):不要出现'""'+这些符号

  10. oracle学习之undo的基本知识及事务与undo、数据块的关联

    通过自己学习总结的这些undo知识能够让大家都能深刻了解oracle的undo相关原理. 一.undo撤销表空间的作用 撤销表空间通常称为undo表空间:undo表空间的段也称为撤销段或undo段.回 ...