Zip slip (ARCH7106)
Anahtar php.security.zip-slip · Önem error · Kategori security · CWE CWE-22
Arşiv giriş yollarını doğrulamadan diske yazmak, ../ içeren giriş adlarıyla hedef dizinin dışına dosya yazılmasına olanak tanır. Her giriş hedefinin çıkarma kökü içinde kaldığı doğrulanmalıdır.
Hatalı
Bölüm başlığı “Hatalı”<?php$zip = new ZipArchive();$zip->open($_FILES['archive']['tmp_name']);$zip->extractTo('/var/www/data');$zip->close();<?php$dest = '/var/www/data';$zip = new ZipArchive();$zip->open($_FILES['archive']['tmp_name']);for ($i = 0; $i < $zip->numFiles; $i++) { $name = $zip->getNameIndex($i); $path = realpath($dest) . '/' . $name; if (str_contains($name, '..') || !str_starts_with($path, realpath($dest) . '/')) { continue; } $zip->extractTo($dest, $name);}$zip->close();Düzeltme
Bölüm başlığı “Düzeltme”Her arşiv girişinin çözümlenmiş hedef yolunun çıkarma dizini içinde kaldığını doğrulayın; .. içeren girişleri atlayın.