14 Haziran 2017 Çarşamba

JarFile Sınıfı - Jar Dosyasını Okur

Giriş
Şu satırı dahil ederiz.
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
Jar dosyasını dolaşacaksak
1. entries()
2. stream()
metodları kullanılabilir. entries() metoduna Sonar hata veriyor, çünkü entries() metodu sadece Jar'ın başlık zarfını (header) okuyor. Bu da ZipBomb saldırısına imkan tanıyor. 

Doğru kod şöyle
File f = new File("ZipBomb.zip");
ZipFile zipFile = new ZipFile(f);
Enumeration<? extends ZipEntry> entries = zipFile.entries();

int THRESHOLD_ENTRIES = 10_000;
int totalEntryArchive = 0;

while(entries.hasMoreElements()) {
  ZipEntry ze = entries.nextElement();
  totalEntryArchive ++;
  if(totalEntryArchive > THRESHOLD_ENTRIES) {
    // too many entries in this archive, can lead to inodes exhaustion of the system
    break;
  } 
  ...
}
constructor - String
Şöyle yaparız.
String path = ...;
JarFile jar = new JarFile (path);
entries metodu
JarEntry nesnesi döner
Örnek
Şöyle yaparız.
Enumeration<JarEntry> entries = jar.entries();
Dönmek için şöyle yaparız.
while (entries.hasMoreElements()) {
  JarEntry entry = entries.nextElement();
  ...
}
getInputStream metodu
Şöyle yaparız.
JarEntry entry = ...;
InputStream is = jar.getInputStream (entry);
getManifest metodu
Manifest dosyasının okuyabilmeyi sağlar. 
Örnek
Şöyle yaparız.
JarFile jar = ...;
Manifest manifest = jar.getManifest();
Map<String, Attributes> map = manifest.getEntries();
Attributes a = map.get("classes.dex");
Örnek
Şöyle yaparız
String jarPath = ...;
String errorMessage;
String mainClassName;

try (JarFile jarFile = new JarFile(jarPath)) {
  Manifest manifest = jarFile.getManifest();
  if (manifest == null) {
    errorMessage = "No manifest file in " + jarPath;
    return;
  }
  Attributes mainAttributes = manifest.getMainAttributes();
  mainClassName = mainAttributes.getValue("Main-Class");
  if (mainClassName == null) {
    errorMessage = "No Main-Class found in the manifest of " + jarPath;
  }
}



Hiç yorum yok:

Yorum Gönder