Java 文件系统安全_01

Java 文件读写可以分为 阻塞模式IO非阻塞模式 NIO

java.io.FileSystem 属于 阻塞模式

文件读取代码示范:

import java.io.*;

public class Java_io_demo {
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\XXX\\Desktop\\demo.txt");

        // 打开文件对象、创建文件输入流
        FileInputStream fis = new FileInputStream(file);

        // 每次输入流读取到的字节数对象
        int n = 0;
        byte[] bytes = new byte[512];
        // 创建二进制输出流对象
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        // 循环读取内容
        while ((n = fis.read(bytes)) != -1) {
            out.write(bytes, 0, n);
        }
        System.out.println(out.toString());
    }
}

其中FileInputStream的read方法调用了 readBytes方法。readBytes属于Java Native方法。

private native int readBytes(byte b[], int off, int len) throws IOException;

调用链:

main() ---> read() ---> readBytes()

Native方法本质上是 一种在Java源码中声明,但实现使用C\C++的一类方法。 用于操作系统交互、访问底层硬件等…

例如readBytes方法的具体实现在 /native/libjava/FileInputStream.c 中。
https://github.com/unofficial-openjdk/openjdk/blob/jdk/jdk/src/java.base/share/native/libjava/FileInputStream.c

任意文件读取类
java.io.RandomAccessFile
可以获取文件指针、文件偏移量等。可理解为对内容的精细操作。

FileSystemProvider
利用支持异步的通道(Channel)模式读取文件内容
从JDK7开始提供,快捷文件读写操作。
示范代码:

public static void main(String[] args) {
        Path path = Paths.get("C:\\Users\\xxx\\Desktop\\demo.txt");

        try {
            byte[] bytes = Files.readAllBytes(path);
            System.out.println(new String(bytes));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

安全问题1:
Java文件名空字节截断漏洞。
来源:Java语言使用C实现的功能时导致的漏洞,Java SE 7 update 40之前。
用途:文件上传、正则匹配、文件路径获取等场景…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值