Apache Commons Compress в качестве решения для Zip BombJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Apache Commons Compress в качестве решения для Zip Bomb

Сообщение Anonymous »

Java Code реализован в Uncripress zip -файл с использованием библиотеки java.util.zip. Sonarqube сообщает о уязвимости горячих точек безопасности как склонной к « Zip Bomb » «Проблема безопасности с сообщением» Убедитесь, что расширение этого архивного файла здесь безопасно «в строке»ZipEntry entry = zipIn.getNextEntry(); ". Библиотека "? < /P>

org.apache.commons
commons-compress
1.21


уязвимый код Zip Bomb
private void unzipNormal(String zipFilePath, String destDirectory) {
try {
File destDir = new File(destDirectory);
if(!destDir.exists()) {
destDir.mkdir();
}

try(ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry entry = zipIn.getNextEntry();
while(entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if(!entry.isDirectory()) {
extractFile(zipIn, filePath);
} else {
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}

} catch (Exception ex) {
ex.printStackTrace();
}
}

private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
try(BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) {
byte[] bytesIn = new byte[4096];
int read = 0;
while((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}

реализация с использованием библиотеки Apache Commons Compress
private void unzip(String srcZipFile, String destFolder) throws IOException {

Path filePath = Paths.get(srcZipFile);

try(InputStream inputStream = Files.newInputStream(filePath);
ZipArchiveInputStream i = new ZipArchiveInputStream(inputStream)
) {
System.out.println("Begin..");
ArchiveEntry entry = null;
while((entry = i.getNextEntry()) != null) {
if(!i.canReadEntryData(entry)) {
System.out.println("Continue..");
continue;
}

Path path = Paths.get(destFolder, entry.getName());
File f = path.toFile();
if(entry.isDirectory()) {
if (!f.isDirectory() && !f.mkdirs()) {
throw new IOException("failed to create directory " + f);
}
} else {
File parent = f.getParentFile();
if(!parent.isDirectory() && !parent.mkdirs()) {
throw new IOException("failed to create directory " + parent);
}
try (OutputStream o = Files.newOutputStream(f.toPath())) {
IOUtils.copy(i, o);
}
}

}
} catch (Exception ex) {
ex.printStackTrace();
}
}


Подробнее здесь: https://stackoverflow.com/questions/724 ... o-zip-bomb
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»