Manual:Image authorization/fr

Cet article concerne les administrateurs système qui souhaitent restreindre l'accès aux images et aux fichiers en se basant sur les utilisateurs et (ou) les droits des groupes d'utilisateurs.

Les fichiers téléversés sont généralement distribués directement par le serveur web, et non pas via MediaWiki. Alors qu'il existe un niveau minimal de sécurité masqué par l'encodage des chemins (comme /c/c4/...), le chemin peut être calculé facilement à partir du nom de fichier ce qui ne fournit pas de réelle protection.

Ce n'est pas une configuration recommandée. MediaWiki n'est pas conçu pour être un système de gestion de contenu (CMS - Content management system), ni pour protéger les données sensibles. Au contraire, il a été conçu pour être le plus ouvert possible. Ainsi, il ne prend pas en charge de manière inhérente une protection complète et étanche du contenu privé. Tout administrateur souhaitant utiliser cette fonctionnalité doit relire attentivement les Problèmes de sécurité avec les extensions d'autorisation.

Présentation
Par défaut, toutes les images et les fichiers téléversés sont accessibles directement par le serveur web. Si vous souhaitez donner accès uniquement aux utilisateurs autorisés de l'environnement MediaWiki, il faut réunir deux conditions :


 * 1) Le répertoire actuel doit être protégé contre l'accès direct et,
 * 2) MediaWiki Authorization doit être appelé en exécutant un script lorsqu'une URL contenant ce répertoire est demandée pour accèder à une image ou un fichier.

L'implémentation fondamentale nécessite :


 * 1) Le répertoire des images  doit être déplacé en dehors de la racine du web dans le système de fichiers, ou bien protégé
 * 2) Le chemin de téléversement  doit pointer vers.

Dans les deux cas, les mécanismes dépendent de la plateforme du serveur web. Cet article fournit des instructions détaillées pour les deux plateformes :


 * 1) Apache (la plupart des versions)
 * 2) Microsoft Internet Information Server (IIS), version 6.0 et supérieure

Dans toutes les instructions, on suppose que MediaWiki est installé dans.

Par exemple dans :

http://wiki.yourwiki.org/MyWiki

/path/to vaut /MyWiki

Comment fonctionne img_auth.php ?
L'autorisation d'accès aux images fonctionne en interceptant l'URL et en vérifiant que le reste (PATH_INFO) est à un endroit où l'utilisateur à accès en se basant sur les protections que vous avez assignées concernant l'ID usuel de l'utilisateur et les espaces de noms, etc... Lorsque vous avez défini le chemin des téléversements pour qu'il pointe vers un répertoire qui redirige automatiquement pour inclure un script dans le chemin, le script est exécuté pour déterminer si l'accès doit être donné au fichier ou pas.

Voila ce qui se passe réellement. Si le pointeur vers l'image ou le fichier est initialisé à, ceci est traduit en    par MediaWiki et le serveur exécute alors img_auth.php en lui passant   dans la variable PATH_INFO du serveur.

img_auth.php vérifie ensuite si l'utilisateur a accès à ce fichier particulier et si c'est le cas, il le renvoie. Si ce n'est pas le cas, l'erreur standard 403 est affichée.

Configurer le téléversement des fichiers
Avant d'adopter cette configuration, il est très important que vous compreniez comment configurer le téléversement des fichiers. Veuillez prendre quelques instants pour relire et comprendre cet article - cela vous épargnera beaucoup de temps.

Prise en charge du PATH_INFO PHP
Ceci nécessite que votre configuration PHP prenne en charge PATH_INFO (beaucoup de configurations CGI ne le font pas) et que êtes dans le mode ou sinon, il n'y aura pas de point ... à moins que vous ne souhaitiez sécuriser davantage l'installlation MediaWiki; voir ci-dessous.

Un autre scénario dirigé par la sécurité (uniquement pour Apache/Unix)
Même si vous ne voulez pas restreindre l'accès à vos images, vous pouvez utiliser la mécanique de img_auth.php : pour éviter les répertoires accessibles publiquement, sur lesquels le serveur web a des droits d'écriture. Bien qu'avoir un répertoire sur le serveur web accessible en écriture n'est pas dangereux en soi, ceci est la première moitié pour une attaque réussie de votre serveur web. La seconde moitié ensuite pourrait être un script exploitable (PHP) de MediaWiki lui-même ou, plus vraisemblablement, un autre script. Si l'attaquant peut exploiter le script corrompu pour téléverser ou pour générer un autre script qui va l'aider lors d'attaques ultérieures, de spamming, ou autres ... l'attaquant doit encore trouver un endroit pour y enregistrer ce script, qui soit accessible en écriture par le serveur web ..., disponible et bien connu dans le répertoire 'images' des installations standard de MediaWiki.

Une toute première mesure de sécurité pour cela, est de mettre un fichier .htaccess dans le répertoire 'images' avec le contenu suivant :

Par contre .htaccess ne doit pas être modifiable par le serveur web ! C'est dommage que MediaWiki ne soit pas livré avec cette restriction par défaut (au moins pas dans la version 1.6.10).

Il serait encore meilleur de déplacer le répertoire 'images' accessible en lecture, en dehors de la racine des documents, en le renommant sous un nom que l'on ne puisse pas deviner (par exemple le code de hachage MD5 de &lt;ceQueVousVoulez&gt;) et de distribuer les images via 'img_auth.php', de sorte que le répertoire réel ne soit jamais divulgué nulle part.

Pour faire cela, suivez les étapes ci-après :

 connectez-vous au shell de votre serveur web en mode ligne de commande (des actions similaires sont souvent possibles avec votre client FTP, si ce n'est pas le cas demandez à votre fournisseur de vous aider) créez le répertoire images/upload en dehors de (en parallèle de) la racine de votre document (notez le  à la fin du chemin) et de sorte que l'on ne puisse pas le deviner :  déclarez-le accessible en lecture et écriture par le serveur web :   create the .htaccess file as noted above and make it readable only (this is paranoia, because the web server never looks here, only PHP not taking care of .ht* files normally, but just in case this directory ever will be made available to the web server directly) :  mettez à jour votre fichier de configuration LocalSettings.php :  

qui devrait faire ce qu'on attend sans configuration supplémentaire.

Cela devrait convenir pour tous les serveurs web qui utilisent PHP avec un module Apache. Il n'y a pas d'autre modification des fichiers de configuration Apache à faire. Par conséquent vous ne verrez jamais le chemin vers vos images, car img_auth.php intercepte tous les accès en lecture. Mais toutes vos images sont disponibles, y compris les vignettes.

Si vous utilisez CGI ou IIS, votre fidélisation (milage) peut varier.

Instructions Apache
La plupart des administrateurs ont trouvé directe et très simple, l'implémentation dans l'environnement Apache.

 If you are using a GoDaddy shared hosting account, you may need to reference this thread if you are having problems viewing uploaded images with img_auth.php: 

Apache étape 1. Protéger le répertoire Images de l'accès Internet
Dans votre répertoire [/path/to]/images, créez un fichier .htaccess contenant une ligne :

Deny from All

Apache étape 2.1. modifier dans LocalSettings.php. Pas utile si l'étape 2.2 Apache a été faite
is the URL path, not the file system path, so if img_auth.php is in  but is accessed as , the line would read:

Vérifiez d'avoir bien commencé par une barre oblique  si   est actuellement dans votre répertoire racine. Les images ne seront pas affichées du tout si vous oubliez de faire ainsi :

Apache étape 2.2. créer des alias pour exécuter img_auth.php
Mettez à jour le fichier httpd.conf en ajoutant les deux alias suivants :

Alias [/path/to]/images/ [/path/to]/img_auth.php/ Alias [/path/to]/images [/path/to]/img_auth.php

The second [/path/to] on each line should be the absolute path on the file system, and it may be necessary to add a trailing frontslash to img_auth.php (i.e., use [/path/to]/img_auth.php/).

Apache étape 1. télécharger le script cgi de prise en charge d'autorisation d'image
Si PATH_INFO n'existe pas, téléchargez le script CGI de prise en charge des droits des images. Enregistrez le script sous le nom  dans votre répertoire MediaWiki.

Apache étape 2. Protéger le répertoire Images de l'accès Internet
Dans votre répertoire [/path/to]/images, créez un fichier .htaccess contenant une seule ligne :

Deny from All

Apache étape 3.2. modifier .htaccess
Mettez à jour le fichier .htaccess pour qu'il ressemble à

RewriteEngine on RewriteRule ^/path/to/images(.*)$ /path/to/cgi_img_auth.php/$1 [R] RewriteRule ^path/to/cgi_img_auth.php/(.*)$ path/to/cgi_img_auth.php?path=/$1

Notez par ailleurs que cette étape n'est pas nécessaire avec certaines installations.

Apache - assurez la compatibilité en utilisant des URLs à jour
If your website is rewriting URLs through .htaccess, then you will need an exception before the custom rewrites:

RewriteCond %{REQUEST_URI} /img_auth\.php/ RewriteRule ^ - [L]

(Cela signifie : dans le cas où img_auth est appelé, règles d'arrêt)

Exemple de fichier .htaccess :

RewriteEngine On RewriteCond %{REQUEST_URI} /img_auth\.php/ RewriteRule ^ - [L] RewriteCond ... RewriteRule ...
 * 1) First condition&rule:
 * 1) Rest of rules:

Apache - masquer la liste des répertoires
Si vous ne souhaitez pas que les utilisateurs puissent lister votre répertoire d'images, indiquez le dans la configuration Apache :

 Options -Indexes 

Instructions IIS
L'implémentation sous IIS est plus complexe car on n'y dispose pas des possibilités du 'pipe' de Apache ou d'Unix en général. Néanmoins, avec quelques manipulations on peut faire en sorte que IIS puisse exécuter le CGI et assurer la protection.

IIS étape 1. Protéger le répertoire Images de l'accès Internet anonyme
With IIS it is important that users cannot access images or files by using alternative URL paths to the bypass the virtual directory redirect. C'est pourquoi il faut créer un nouveau répertoire hors de la racine de MediaWiki.

IIS étape 1.1 créer un nouveau répertoire physique
Créez un nouveau répertoire physique. Ce répertoire ne doit pas se trouver à l'intérieur d'un autre répertoire web existant, ni d'un autre répertoire web virtuel :

Exemple :

c:\inetpub\wwwroot\MyWikiImg

IIS étape 1.2 vérifiez ou configurez la sécurité des répertoires
The Directory security must allow read, write, modify for the Internet Guest Account (usually IUSR_[server name]). Ne vous inquiétez pas, on va corriger cela dans les étapes suivantes.

IIS étape 2. exécuter le script img_auth.php pour tous les accès au répertoire Image
In IIS this is done by creating a virtual directory with the same name as the physical directory (if your directory is off the root web).

IIS étape 2.1 créer le répertoire virtuel de même nom que le répertoire physique
Create a new virtual directory using Start->Administrative Tools->Internet Information Services (IIS) Manager in the web service you are using for MediaWiki.

Pour créer le répertoire virtuel, cliquez-droit sur le service web -> New Virtual Directory...

Dans l'assistant, créez un nouveau répertoire virtuel ayant le même nom que le répertoire physique et faites le pointer vers ce répertoire.

IIS étape 2.2 rediriger le nouveau répertoire virtuel vers img_auth.php
Still in IIS Manager, right click on the new virtual directory->Properties select the 'Virtual Directory' tab and change the 'The content for this resource should come from:' to 'A redirection to a URL'. Initialisez 'Redirect To:' avec l'URL vers img_auth de votre MediaWiki.

Exemple :

http://wiki.yourwiki.org/MyWiki/img_auth.php

N'oubliez pas de cliquer sur Apply pour exécuter.

IIS étape 3 copier l'ancien répertoire image dans le nouveau
Copiez le contenu de l'ancien répertoire d'images ($ip/image) ainsi que les sous-répertoires dans le nouveau répertoire que vous avez créé.

Le nouveau répertoire ne devrait pas apparaître comme :

Mauvais :

MyWikiImg images 0   1    . ..

Bon :

MyWikiImg 0 1  . ..

IIS étape 4.1 modifier  dans LocalSettings.php
Exemple :

IIS étape 4.2 modifier  dans LocalSettings.php
Exemple :

IIS étape 4.4 PATH_INFO IIS problématique
If your installation is not working, it may be because img_auth.php requires the server to return PATH_INFO to know exactly which file you wish to access (e.g., everything in the URL after the virtual directory).

There have been several articles and hints that some versions of IIS may disallow the server variables PATH_INFO and PATH_TRANSLATE 'for security reasons'. While we did not have this problem on the current server and patch level (IIS 6.0) it is a noted issue for IIS 4.0 (and possibly prior), you may want to investigate if img_auth.php is not working for you.

L'article complet de la base de connaissance se trouve sur Using PATH_INFO and PATH_TRANSLATED from CGI Applications. Cet article vous indique la manière d'exécuter un programme écrit en MS Visual Basic (il est possible que vous deviez charger CScript).