Security: Ajout test pour éviter download fichier hors htdocs

This commit is contained in:
Laurent Destailleur 2007-04-12 20:25:12 +00:00
parent 2869d451e6
commit 64e783ab04

View File

@ -1381,13 +1381,14 @@ function dolibarr_print_error($db='',$error='')
\brief Deplacer les fichiers telechargés, apres quelques controles divers \brief Deplacer les fichiers telechargés, apres quelques controles divers
\param src_file fichier source \param src_file fichier source
\param dest_file fichier de destination \param dest_file fichier de destination
\return int le resultat du move_uploaded_file \return int true=Deplacement OK, false=Pas de deplacement ou KO
*/ */
function doliMoveFileUpload($src_file, $dest_file) function doliMoveFileUpload($src_file, $dest_file)
{ {
$file_name = $dest_file; $file_name = $dest_file;
// On renomme les fichiers avec extentio executable car si on a mis le rep // Security:
// On renomme les fichiers avec extention executable car si on a mis le rep
// documents dans un rep de la racine web (pas bien), cela permet d'executer // documents dans un rep de la racine web (pas bien), cela permet d'executer
// du code a la demande. // du code a la demande.
if (eregi('\.php|\.pl|\.cgi$',$file_name)) if (eregi('\.php|\.pl|\.cgi$',$file_name))
@ -1395,6 +1396,24 @@ function doliMoveFileUpload($src_file, $dest_file)
$file_name.= '.txt'; $file_name.= '.txt';
} }
// Security:
// On interdit les remontées de repertoire ainsi que les pipe dans
// les noms de fichiers.
if (eregi('\.\.',$src_file) || eregi('[<>|]',$src_file))
{
dolibarr_syslog("Refused to deliver file ".$src_file);
return false;
}
// Security:
// On interdit les remontées de repertoire ainsi que les pipe dans
// les noms de fichiers.
if (eregi('\.\.',$dest_file) || eregi('[<>|]',$dest_file))
{
dolibarr_syslog("Refused to deliver file ".$dest_file);
return false;
}
return move_uploaded_file($src_file, $file_name); return move_uploaded_file($src_file, $file_name);
} }