Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Dossiers

Référence sur drupal.org : 29 Janvier 2008 – 17h59 - http://drupal.org/node/117058


Pour les débutants : assurez-vous toujours que les actions sur les fichiers (upload, visualisation, donwload, suppression) se fassent dans le dossier files ou dans tout autre dossier réservé à cet effet. Faites attention au fait que dans les exemples ci-dessous, le dossier files est codé en dur dans le code, en réalité le nom de ce dossier est paramétrable.

Les utilisateurs n’ont pas à accéder aux fichiers système (tels que /etc/password ou sites/default/settings.php). Bien que les exemples ci-dessous s’intéressent surtout à la suppression des fichiers, ayez à l’esprit que lire des fichiers quels qu’ils soient est  néfaste.

<?php
/** Exemple 1 - Périlleux
  * Suppression arbitraire de fichier
  *
  * $file est le chemin/fichier (eg files/myfile.txt) fourni par l'utilisateur.
  */
file_delete($file);
?>

Dans ce premier exemple, un utilisateur malveillant peut outrepasser la confiance qui lui est donnée en fournissant des noms de fichiers dans différentes dossiers tels que /sites/default/settings.php. L’attaque est clairement limitée par les droits du compte utilisateur, qui exécute Drupal (souvent le serveur web), sur ces fichiers.

<?php
/** Exemple 2a - Périlleux
  * Suppression arbitraire de fichier
  *
  * $file est le nom de fichier (eg. myfile.txt) fourni par l'utilisateur.
  */
file_delete("files/$file");
?>
<?php
/** Exemple 2b - Périlleux
  * Suppression arbitraire de fichier
  *
  * $file est le chemin/fichier (eg files/myfile.txt) fourni par l'utilisateur.
  */
// Check whether $file is files/file
if (strpos($file"files/") === 0) {
  
file_delete($file);
}
?>

Les exemples 2a et 2b essaient d’atténuer l’attaque en s’assurant tout deux que le nom du fichier fourni soit précédé d’un nom de dossier. Ces deux exemples sont vulnérables à une attaque avec les dossiers parents (..).

Que se passerait-il si un utilisateur malveillant indiquait comme chemin :

Exemple 2a : ../sites/default/settings.php

Exemple 2b : files/../sites/default/settings.php

Les deux essaieront d’effacer sites/default/settings.php.

Pour une vérification correcte du vrai chemin d’un fichier, utilisez la fonction Drupal file_check_location.

<?php
/** Exemple 3
  * N'est plus vulnérable aux attaques de type chemin-parent (..) .
  *
  * $file est le chemin/fichier (eg files/myfile.txt) fourni par l'utilisateur.
  */
// Check whether $file is files/file
if (file_check_location($file'files') {
  
file_delete($file);
}
?>