Wiki+

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é >>

UpdateMe


Traduction de PmWiki.UploadsAdmin Page originale sur PmWikiFr.UploadsAdmin - Backlinks
DerniĂšres modifications:
PmWikiFr.UploadsAdmin: December 23, 2021, at 12:48 AM
PmWiki.UploadsAdmin: March 07, 2026, at 11:10 AM