Administration des fichiers joints

La traduction de cette page est à vérifier

PmWiki possède une fonction codée dans upload.php qui permet aux utilisateurs de transférer des fichiers sur le serveur wiki à partir d'un navigateur. Ces fichiers peuvent aisément être rendus accessibles en utilisant un code dans les pages wiki. Cette page décrit comment mettre en place et configurer les transferts de fichiers.

Quelques notes à propos de sécurité.

1. Garder à l'esprit que permettre aux utilisateurs (anonymement !) de télécharger des fichiers sur votre serveur web entraîne un certain nombre de risques. Le script upload.php a été conçu pour minimiser les risques, mais les administrateurs du Wiki devraient être conscients que le potentiel de vulnérabilités existe, et qu'une mauvaise configuration de l'utilitaire de téléchargement peut aboutir à des conséquences indésirables.

2. Par défaut, les utilisateurs autorisés peuvent écraser les fichiers téléchargés auparavant, sans possibilité de restaurer la version précédente de ces fichiers. Si vous ne voulez pas permettre aux utilisateurs d'écraser les fichiers déjà transférés, ajoutez la ligne suivante dans votre config.php:

    $EnableUploadOverwrite = 0;

Base de l'installation

Le script upload.php est automatiquement inclus depuis le fichier stdconfig.php si la variable $EnableUpload est activée dans config.php. De plus, dans config.php on peut configurer les variables $UploadDir et $UploadUrlFmt pour préciser le dossier où les fichiers devraient être stockés, et l'URL qui peut être utilisée pour accéder à ce dossier. Par défaut, $UploadDir et $UploadUrlFmt suppose que les fichiers seront enregistrés dans un dossier nommé uploads situé dans le répertoire courant (usuellement celui qui contient pmwiki.php). De plus, config.php devrait aussi contenir le mot de passe par défaut pour tout téléchargement (voir Administration des mots de passe).

Aussi, un fichier config.php de base paramétré pour le téléchargement devrait ressembler à ça:

    <?php
      $EnableUpload = 1;
      $UploadDir = "/home/john/public_html/uploads";
      $UploadUrlFmt = "http://www.john.com/~john/uploads";
      $DefaultPasswords['upload'] = crypt('secret');
      ## options de configuration additionnelles ici...
    ?>

Pour que les transferts fonctionnent correctement, le dossier désigné par $UploadDir doit être accessible en écriture par le processus du serveur web, et il doit être situé à un endroit publiquement accessible à partir du web (par ex., dans un sous-dossier de public_html). L'administrateur du Wiki peut soit créer ce dossier manuellement, ou soit laisser à Pmwiki le soin de le créer lorsque celui-ci est exécuté avec l'option de téléchargement activée ($EnableUpload = 1 dans config.php). Pour que PmWiki puisse créer le dossier, (1) changez les permissions du dossier parent à 2777, (2) lancer PmWiki avec la fonctionnalité de téléchargement activée, (3) vérifiez que le dossier upload est créé, et (4) rétablissez les permissions du dossier parent à leur valeur initiale (755 en général est une valeur sûre).

Par exemple, pour que le dossier upload soit installé dans "/home/john/public_html/uploads", il faudrait faire "chmod 2777 /home/john/public_html", lancer pmwiki.php, s'assurer que le dossier upload soit bien créé ("ls /home/john/public_html"), et rétablir les permissions normales du dossier parent ("chmod 755 /home/john/public_html").

Une fois les transferts de fichiers mis en route, les utilisateurs peuvent accéder au formulaire des téléchargements en ajoutant "?action=upload" à la fin d'une URL normale de PmWiki. Un mot de passe pour effectuer le transfert sera alors demandé aux utilisateurs de la même manière quand d'autres pages requièrent un mot de passe pour d'autres permissions (voir Mots de passe et Administration des mots de passe pour savoir comment établir des mots de passe sur des pages, des groupes, ou sur le site globalement).

Une autre façon d'accéder au formulaire de téléchargement est d'insérer le code "Attach:filename.ext" dans une page existante, où filename.ext est le nom du fichier à transférer. Quand la page est affichée, un '?-lien' est ajouté à la fin de l'attachement et envoie l'auteur à la page des téléchargements.

Par défaut, PmWiki organise les fichier téléchargés dans des sous-dossiers séparés pour chaque groupe. Ceci peut être changer en modifiant la variable $UploadPrefixFmt.

Restrictions sur les fichiers téléchargés

Le scripte upload.php effectue un certain nombre de vérifications sur un fichier téléchargé avant de l'enregistrer dans le dossier upload. Ces vérifications sont décrites ci-dessous.

noms de fichier - le nom pour un fichier téléchargé peut être composé de lettres, de chiffres, de soulignés (underscore), de traits d'union et de points et il doit commencer et se terminer par une lettre ou un chiffre.

extension de fichier - seuls les fichiers avec des extensions volontairement approuvées[1] telles que ".gif", ".jpg", ".doc", etc. sont autorisés à être transférer sur le serveur web. Ceci est d'une importance capitale pour la sécurité du serveur, car celui-ci pourrait essayer d'exécuter ou de traiter spécifiquement des fichiers avec de extensions comme ".php", ".cgi", etc.

taille des fichiers - Par défaut upload.php limite tous les téléchargements à 50K de part la valeur spécifiée dans la variable $UploadMaxSize. Aussi pour pousser cette limite de tous les transferts à 100K, spécifiez simplement dans local/config.php

    $UploadMaxSize = 100000; 

Cependant, upload.php permet de préciser la taille maximum des fichiers pour chaque type de téléchargement. Ainsi, un administrateur peut restreindre les ".gif" et les ".jpeg" à 20K, les ".doc" à 200K, et tous les autres à la taille indiquée par $UploadMaxSize. Le tableau de variables $UploadExtSize est utilisé pour déterminer quelles sont les extensions valides et quelle est la taille maximum (en octets) pour chaque type de fichier. Par exemple:

    $UploadExtSize['gif'] = 20000;      # limite les fichiers .gif à 20K

Paraméter une entrée à zéro désactive complètement le téléchargement d'un type de fichier:

    $UploadExtSize['zip'] = 0;          # interdit le transfert des fichiers .zip

Un autre tableau de variables appelé $UploadExts est utilisé pour remplir $UploadExtSize avec les extensions qui devraient être limitées à la valeur d'$UploadMaxSize. Par défaut, $UploadExts contient un certain nombre d'extensions de fichier populaires (et sûrs), mais cela peut être changé par un administrateur qui voudrait limiter sévèrement les téléchargements par types. Par exemple:

    $UploadExts = array('gif','jpeg','jpg','png','ppt'); // cette ligne n'aura aucun effet de restriction
    $UploadMaxSize = 20000;
    $UploadExtSize['ppt'] = 150000;
    $UploadExtSize['doc'] = 150000;

defini dans local/config.php autorise seulement les fichiers GIF, JPEG et PNG jusqu'à 20K, les fichers PowerPoint et Word jusqu'à 150K, et interdit tous les autres types.

Pour interdire une extension autorisée par défaut[2], il faut remplir la variable $UploadBlacklist, par exemple :

    $UploadBlacklist = array ('.bmp', '.cgi', '.exe', '.fla', '.hqx','.htm','.swf');

Deux autres facteurs sont impliqués dans l'affection de la limite de taille des fichiers transférés. Dans Apache 2.0, la directive LimitRequestBody contrôle la taille maximum de tout ce qui est posté (les téléchargments inclus). Initialement dans Apache, cette taille est illimitée. Pourtant, certaines distributions Linux incluant Red Hat fixent cette limite à 512K aussi il peut être nécessaire de la changer ou de l'augmenter. Pour ce faire il suffit d'éditer le fichier config.php localisé dans votre dossier de configuration d'Apache (la plupart du temp dans /etc/httpd/conf.d).

PHP lui même possède deux limites sur les fichiers téléchargés. La première est le paramètre de taille maxi d'un fichier transféré (upload_max_size), fixé à 2M par défaut. Le second est la taille maxi d'un post (post_max_size), fixé à 6M par défaut.

Avec les variables en jeu--taille maximum de transfert de PmWiki, la limite de taille des requêtes d'Apache, et les paramètres de taille de fichier propre à PHP, la taille maximum autorisée sera la plus petite de ces trois paramètres.

Autres notes

  • Notez que l'accès en lecture aux fichiers transférés n'est contrôlé par aucune des permissions de page ou de groupe--les fichiers transférés sont accessibles même si les pages sont protégées en lecture par un mot de passe.

Question La variable $UploadExts = array('gif','jpeg','jpg','png','ppt'); ne marche pas. Quelqu'un peut-il m'aider?
Reponse : La fonction SDVA() utilisé pour remplir $UploadExts dans le script upload.php rajoutera toutes les extensions prévues par défaut qui n'auront pas été déjà mentionnée dans le fichier de config.php.
On peut au contraire ajouter des extensions à autoriser qui ne le serait pas par défaut en faisant :
$UploadExts = array('.monExtensionARajouter' => 'mime_type_appropie');


<< BackupAndRestore | Index de la documentation | Sécurité >>


Traduction de PmWiki.UploadsAdmin Page originale sur PmWikiFr.UploadsAdmin - Backlinks
Dernières modifications:
PmWikiFr.UploadsAdmin: 2013-10-23
PmWiki.UploadsAdmin: 2022-01-14