gpt4 book ai didi

java - 限制缓冲区读取器以防止 DoS 攻击

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:12 24 4
gpt4 key购买 nike

我需要以下代码的帮助。我需要对其进行审查并修复代码中的安全问题。我看到的问题是 BufferReader 应该以 block 的形式读取。这可能会阻止 DOS 攻击。按照现在编写代码的方式,它将读取无限长度。我不确定限制 BufferReader 的最佳方法。任何帮助将不胜感激。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class example {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Read the filename from the command line argument
String filename = args[0];
BufferedReader inputStream = null;

String fileLine;
try {
inputStream = new BufferedReader(new FileReader(filename));

System.out.println("Email Addresses:");
// Read one Line using BufferedReader
while ((fileLine = inputStream.readLine()) != null) {
System.out.println(fileLine);
}
} catch (IOException io) {
System.out.println("File IO exception" + io.getMessage());
} finally {
// Need another catch for closing
// the streams
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException io) {
System.out.println("Issue closing the Files" + io.getMessage());
}

}
}

}

最佳答案

关于 BufferedReader.readLine 的警告背后的要求是对对手一次可以分配的最大内存量施加合理的限制。在这种情况下,重要的用法是 String 字符的大小,并且与用于创建它的缓冲区中的大小大致相同。如果对手可以一次多次执行此操作,那么也需要对其进行限制。通常,如果资源可以停止但不能关闭(例如,通过网络文件系统),则缓冲区可以无限期地保留在内存中。

简单、通用的解决方案是实现一个 InputStream 来限制可以通过它读取的字节总数。这也可以在限制字符数的Reader级别实现。肮脏的方法是忽略 BufferedReader 并自行读取 char 数组并组合到 StringBuilder 中。

大概各种第三方库包含涵盖这些方法的代码。

(另外:请务必使用 try-with-resource。FileReader 会选择保留为默认值的任何字符编码,这可能是错误的。将 throws IOException 添加到 main 会使事情变得更简单。)

关于java - 限制缓冲区读取器以防止 DoS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com