Protect from zip-bombs

This commit is contained in:
Daniel Winzen
2017-08-07 21:15:13 +02:00
parent 06dce903dc
commit 6c6b6a689d

View File

@ -15,7 +15,7 @@ if(empty($_SESSION['ftp_pass'])){
exit; exit;
} }
$ftp=ftp_connect('127.0.0.1') or die ('No Connection to FTP server!'); $ftp=ftp_connect('127.0.0.1') or die ('No Connection to FTP server!');
if(!ftp_login($ftp, "$user[onion].onion", $_SESSION['ftp_pass'])){ if(@!ftp_login($ftp, "$user[onion].onion", $_SESSION['ftp_pass'])){
send_login(); send_login();
exit; exit;
} }
@ -152,6 +152,14 @@ if(!empty($_POST['unzip']) && !empty($_POST['files'])){
} }
$tmpfile='/tmp/'.uniqid().'.zip'; $tmpfile='/tmp/'.uniqid().'.zip';
ftp_get($ftp, $tmpfile, $file, FTP_BINARY); ftp_get($ftp, $tmpfile, $file, FTP_BINARY);
//prevent zip-bombs
$size=0;
$resource=zip_open($tmpfile);
while($dir_resource=zip_read($resource)) {
$size+=zip_entry_filesize($dir_resource);
}
zip_close($resource);
if($size<=1073741824){ //1GB limit
$zip->open($tmpfile); $zip->open($tmpfile);
$tmpdir='/tmp/'.uniqid().'/'; $tmpdir='/tmp/'.uniqid().'/';
mkdir($tmpdir); mkdir($tmpdir);
@ -159,6 +167,7 @@ if(!empty($_POST['unzip']) && !empty($_POST['files'])){
ftp_recursive_upload($ftp, $tmpdir); ftp_recursive_upload($ftp, $tmpdir);
rmdir($tmpdir); rmdir($tmpdir);
$zip->close(); $zip->close();
}
unlink($tmpfile); unlink($tmpfile);
} }
} }