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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Apache Commons Compress в качестве решения для Zip Bomb
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Apache Commons Compress в качестве решения для Zip Bomb
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Apache POI java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile
    Anonymous » » в форуме JAVA
    0 Ответы
    105 Просмотры
    Последнее сообщение Anonymous
  • «Невозможно найти метод void org.apache.commons.compress.archivers.zip.ZipFile.<init>(java.nio.channels.SeekableByteChan
    Anonymous » » в форуме Android
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • «Невозможно найти метод void org.apache.commons.compress.archivers.zip.ZipFile.<init>(java.nio.channels.SeekableByteChan
    Anonymous » » в форуме JAVA
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

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