PhpConcept
 
 

Les Nouvelles de PhpConcept

 

  PclZip 2.5 : De nouvelles fonctions  

La version 2.5 de PclZip introduit une fonction de sécurité, ainsi que la possibilité de modifier les noms de fichiers archivés. Pour faire cela, une partie du code a été modifiée pour prendre en compte la notion d'attributs associés au fichier (ou dossier) à archiver. Dans cette version seul le nom du fichier peut être modifié, mais le code a été restructuré pour pouvoir plus facilement intégrer d'autres modifications (comme ajouter une chaîne de caractère comme un fichier, changer les dates, ...). Par contre la modification du code n'a pas encore été faite pour offrir des choses similaires pour la partie extraction.

La documentation n'étant pas encore mise à jour concernant cette nouvelle fonction, voici un exemple d'utilisation :

<?php
$archive 
= new PclZip("archive.zip");
$list $archive->create(array(
                    array( 
PCLZIP_ATT_FILE_NAME => 'data/file1.txt',
                           
PCLZIP_ATT_FILE_NEW_FULL_NAME => 'newdir/newname.txt'
                         
),
                    array( 
PCLZIP_ATT_FILE_NAME => 'data/file2.txt',
                           
PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'newfilename.txt'
                         
),
                    array( 
PCLZIP_ATT_FILE_NAME => 'data/file3.txt')
                  ),
                  
PCLZIP_OPT_ADD_PATH'newpath',
                  
PCLZIP_OPT_REMOVE_PATH'data');
if (
$list == 0) {
  die(
"ERROR : '".$archive->errorInfo(true)."'");
}
?>

  • Avec PCLZIP_ATT_FILE_NEW_FULL_NAME, 'data/file1.txt' sera remplacé intégralement par 'newdir/newname.txt'. Les options globales PCLZIP_OPT_ADD_PATH et PCLZIP_OPT_REMOVE_PATH sont alors ignorées.
  • Avec PCLZIP_ATT_FILE_SHORT_NAME, 'file2.txt', sera d'abord remplacé par 'newfilename.txt', puis les options globales seront appliquées.

Concernant la fonction de sécurité, une alerte nous a été remontée par GulfTech indiquant que PclZip pouvait être utilisé de façon détournée lors de l'extract de fichiers. En effet un script utilisant PclZip pour extraire des fichiers uploadés par un utilisateur du service, pourrait entraîner l'extration de fichier et la modification d'un fichier système. PclZip supporte en effet l'extraction dans différents dossiers. La release 2.5 ajoute donc une option permettant d'imposer l'extraction à partir d'un dossier spécifique. Sur le principe de l'open_basedir restriction de PHP.

<?php
$archive 
= new PclZip("archive.zip");
$list $archive->extract(PCLZIP_OPT_EXTRACT_DIR_RESTRICTION'./base_dir');
if (
$list == 0) {
  die(
"ERROR : '".$archive->errorInfo(true)."'");
}
?>

Ici archive.zip sera extrait dans le dossier courant. Tout fichier dont le chemin ne sera pas dans le sous-dossier 'base_dir' entraînera l'arrêt de l'extraction, et l'emission d'une erreur. A noter que la valeur assoicée à PCLZIP_OPT_EXTRACT_DIR_RESTRICTION doit être un chemin complet depuis la racine du système de fichier (et non relatif). Pour être relatif au dossier courant il faut préfixer par './'.

Télécharger PclZip 2.5


Member login - Stats
Copyright 2003 - PhpConcept

Powered by PcWeb