Giriş
Şu satırı dahil ederiz.
Ş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.
Şöyle yaparız.
Manifest dosyasının okuyabilmeyi sağlar.
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 metoduManifest 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