Table des matières
Sécurité
DokuWiki est une application Web et est souvent utilisée sur des serveurs publics, accessibles sur Internet. Cela signifie qu'il y a beaucoup plus de risques qu'il subissent des attaques que, par exemple, une application locale à votre ordinateur.
DokuWiki est développé en pensant à la sécurité à chaque instant. Nous essayons de trouver un juste équilibre entre l'ergonomie et la sécurité, mais lorsque le cas se présente et qu'aucun compromis n'a été trouvé, l'ergonomie est mise de côté pour privilégier la sécurité.
Cette page devrait vous donner un aperçu des aspects que vous devez surveiller pour être sûr que votre DokuWiki est sécurisé!
Alertes de sécurité
Lorsque vous découvrez un problème de sécurité dans DokuWiki, n'hésitez pas à nous le faire savoir. Quatre moyens sont mis à votre disposition pour nous contacter :
- Rapporter via huntr.dev
- Soumettre un rapport de bogue ;
- Envoyer un courriel à la liste de diffusion ;
- Envoyer un courriel en privé à andi [at] splitbrain [dot] org.
Utilisez les deux premiers moyens de préférence, les troisième et quatrième étant pour des bogues très sérieux, dont la publication avant qu'un patch soit accessible pourrait causer du tort à tous les DokuWiki de par le monde.
Les problèmes de sécurité déjà rencontrés peuvent être vus dans le système de suivi des bugs.
Suivant la gravité du problème de sécurité trouvé, le bogue sera incorporé à une version future (pour les problèmes mineurs) ou feront l'objet d'une “bugfix release”. Dans ce dernier cas, les administrateurs de DokuWiki seront informés via le système de vérification des mises à jour.
Vous devriez toujours utiliser la dernière version de DokuWiki car il n'y a pas de report de résolution sur les anciennes versions.
Sécurité de l'accès web
DokuWiki sauvegarde sa configuration et ses pages dans des fichiers. Ces fichiers ne devraient jamais être accessibles directement sur le web. L'archive DokuWiki contient tout plein de fichiers .htaccess
qui disent, normalement, au serveur web Apache de ne pas autoriser l'accès à certains répertoires.
Si vous n'utilisez pas Apache en serveur web, ou que votre Apache n'utilise pas les fichiers .htaccess
, vous devez sécuriser manuellement votre installation.
Les répertoires suivants ne doivent pas être accessibles depuis internet :
data
conf
bin
inc
(bien qu'il ne soit pas dangereux lorsqu'il est accessible)vendor
(fuites d'infos à propos de votre environnement)
Pour savoir si votre configuration et les droits d'accès sont bons, essayez d'accéder à http://yourserver.com/dokuwiki/data/pages/wiki/dokuwiki.txt
. Vous ne devriez pas avoir accès à ce fichier de cette manière. L'Interface Administrer vérifiera également ces éléments pour vous et affichera un avertissement si quelque chose ne va pas.
Veuillez noter que cela n'a rien à voir avec les permissions de fichiers. L'accès au Web est une configuration spécifique à votre serveur Web.
Si vos répertoires ne sont pas sécurisés correctement, lisez les sections ci-dessous pour savoir comment le faire.
Empêcher l'accès à des répertoires avec Apache
La manière la plus simple est d'activer le support des fichiers .htaccess
dans la configuration de votre Apache. Le tutoriel Apache sur les .htaccess
peut vous y aider.
DokuWiki a déjà ses fichiers .htaccess
configurés. Le contenu d'un fichier .htaccess
qui permet d'empêcher l'accès au répertoire où est placé ce fichier devrait être le suivant (valable pour Apache 2.2 et 2.4):
<IfModule !mod_authz_core.c> Order deny,allow Deny from all </IfModule> <IfModule mod_authz_core.c> Require all denied </IfModule>
Remarque :
Veuillez noter que la prise en charge de .htaccess est désactivée par défaut dans de nombreuses distributions. Pour l'activer, vous devez faire passer la directive AllowOverride de None
à All
pour le répertoire dans lequel votre wiki est installé.
Consultez ce Tutoriel détaillé pour Ubuntu. La configuration d'Apache sur d'autres distributions est très similaire.
Vous pouvez également utiliser la directive LocationMatch pour empêcher l'accès aux répertoires mentionnés sans activer le support .htaccess. Cette méthode est plus performante, mais vous devrez peut-être mettre à jour la directive à l'avenir lorsque de nouveaux répertoires seront ajoutés à DokuWiki. An example may look like this:
<LocationMatch "/(data|conf|bin|inc|vendor)/"> Order allow,deny Deny from all Satisfy All </LocationMatch>
Empêcher l'accès à des répertoires avec IIS
L'accès aux répertoires sus-mentionnés peut être désactivé dans les paramètres de configuration d'IIS.
Dans IIS 8+
(Windows 8(.1) et Serveurs 2012 et 2012R2) :
- sélectionnez “Filtre des requêtes IIS” (“IIS Request Filtering”) ;
- aller sur l'onglet “URL
- cliquez sur “Séquence défendue” (“Deny Sequence…”)
- entrez ”/data/“ dans la fenêtre popup et cliquez sur “OK”.
- Répétez l'instruction “Séquence défendue” pour les répertoires /conf/ /bin/ /inc/ et /vendor/.
Dans IIS7 :
- Sélectionnez “Filtre des requêtes IIS” (“IIS Request Filtering”) ;
- Allez sur l'onglet “URL” ;
- Cliquez sur “Séquence défendue” ;
- Entrez ”/data“ dans la popup.
Répétez cette action pour ”/data/media“ et choisissez “Toujours autoriser” (“Always Allow”), sinon vos images et autres ne seront pas accessibles.
Note : Par défaut, la console de gestion intégrée à Internet Information Services 7 n'a pas la section “Filtre des requêtes IIS” (“IIS Request Filtering”). Cependant, elle peut être activée en installant “IIS Administration pack 1.0” en utilisant l' installateur de plateforme WEB.
Remarque : assurez-vous d'entrer ”/data/“ et PAS seulement ”/data“, sinon les pages qui commencent par “data” seront inaccessibles.
Alternatives pour IIS 7+
Si vous ne pouvez pas accéder aux options de configuration de IIS (comme dans les sites d'hébergement partagé), vous pouvez utiliser l'une des méthodes suivantes
Alternative 1:
Vous pouvez placer le fichier suivant dans votre racine dokuwiki :
- web.config
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <sécurité> <requestFiltering> <filteringRules> </filteringRules> <denyUrlSequences> <add sequence="/data/" /> <add sequence="/conf/" /> <add sequence="/bin/" /> <ajouter une séquence="/inc/" /> <add sequence="/vendor/" /> </denyUrlSequences> </requestFiltering> </security> </system.webServer> </configuration>
Alternative 2:
Vous pouvez placer le fichier web.config suivant dans les répertoires que vous devez protéger.
data
conf
bin
inc
(n'est pas dangereux quand il est accessible, cependant)vendor
(vendeur)
- web.config
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers accessPolicy="None" /> </system.webServer> </configuration>
IIS 6.5 et inférieur
- Ouvrez l'outil de configuration : Démarrer → Paramètres → Panneau de configuration → Outils d'administration → Services d'information Internet
- Naviguez jusqu'au répertoire que vous souhaitez protéger : Ordinateur local → Sites Web → Site Web par défaut → chemin vers le répertoire.
- Cliquez avec le bouton droit de la souris sur le répertoire et choisissez Propriétés → Sécurité du répertoire → Restrictions relatives aux adresses IP et aux noms de domaine → Modifier…
- Choisissez “Par défaut, tous les ordinateurs seront : Refusés d'accès”
- Répétez l'opération pour les répertoires /data/ /conf/ /bin/ /inc/ et /vendor/.
Refuser l'accès aux répertoires dans Lighttpd
En utilisant une |URL re-write, vous pouvez interdire l'accès aux répertoires ci-dessus. Dans votre fichier /etc/lighttpd/lighttpd.conf, l'ajout de la règle de réécriture d'URL suivante devrait suffire à empêcher l'accès. Cela suppose que vos fichiers Dokuwiki sont installés sous http://yourwebsite.tld/dokuwiki/.
url.rewrite-once = ("^/dokuwiki/(data|conf|bin|inc|vendor)/+." => "/dossier inexistant" )
N'oubliez pas de décommenter ou d'ajouter “mod_rewrite” dans la section server.modules de /etc/lighttpd/lighttpd.conf. Cela devrait ressembler à ceci :
server.modules += ( "mod_compress", "mod_dirlisting", "mod_staticfile", "mod_rewrite", )
Malheureusement, cela n'empêche pas les personnes qui utilisent Vivaldi et probablement d'autres navigateurs basés sur Chromium d'accéder au site. Combiné avec ”mod_access“, il empêche les gens d'accéder au site. D'autres exemples de mod_access sont disponibles ici. Dans le fichier /etc/lighttpd/lighttpd.conf, “mod_access” doit se trouver dans la section “server.modules = (”.
$HTTP["url"] =~ "^/dokuwiki/(data|conf|bin|inc|vendor)/+." { url.access-deny = ("") }
Ajoutez également dans /etc/lighttpd/lighttpd.conf.
Redémarrer lighttpd avec systemctl reload-or-restart lighttpd et vérifier l'état avec systemctl status lighttpd
Refuser l'accès au répertoire dans Nginx
L'accès aux répertoires susmentionnés peut être désactivé dans la section serveur DokuWiki du fichier de configuration Nginx. Dans votre fichier de configuration d'hôte (par exemple, /etc/nginx/sites-available/default) ou le fichier nginx.conf, ajoutez l'emplacement suivant pour empêcher l'accès aux répertoires sécurisés..
location ~ /(data|conf|bin|inc|vendor)/ { deny all; }
Remarque : si vous utilisez xsendfile, les règles ci-dessus interrompront la fonctionnalité sendfile. Considérer ce qui suit:
location ~ /(conf|bin|inc|vendor)/ { deny all; } location ~ /data/ { internal; }
Refuser l'accès au répertoire dans Cherokee
Il est relativement facile d'interdire l'accès à ces répertoires en utilisant Cherokee. Dans cherokee-admin, sélectionnez le serveur virtuel où est installé dokuwiki et sélectionnez la gestion des règles.
puis ajoutez une nouvelle règle “Regular Expression” et mettez-y ce qui suit (en supposant que dokuwiki se trouve dans le répertoire racine):
/(data|conf|bin|inc|vendor)/
N'oubliez pas de le définir comme “NON FINAL”, car sinon, un code dans ces répertoires peut toujours être exécuté dans certaines circonstances (règle “Extensions php” comme “NON FINAL” présente, par exemple).
Allez ensuite dans la section “Gestionnaire”(“Handler”) et sélectionnez Erreur HTTP. Enfin, sélectionnez “403 Forbidden” dans Erreur HTTP.
Refuser l'accès au répertoire dans Caddy
Voici un exemple de Caddyfile pour un wiki servi avec Caddy :
wiki.example.com { log /var/log/caddy/dokuwiki.log root /var/www/dokuwiki/ # Assuming install/config of php-fpm # to listen on localhost:9000 fastcgi / 127.0.0.1:9000 php # This block below sends an HTTP 401 message when # a client attempts to access the secured directories. status 401 { /data /conf /bin /inc /vendor } }
Renommer le répertoire data
Sécuriser le répertoire data
est le plus important. Si vous ne pouvez déplacer les répertoires en-dehors du serveur web (voir ci-dessous) ou ne pouvez configurer votre serveur web pour en refuser l'accès (voir ci-dessus), alors vous devriez au moins rendre l'accès au répertoire data
plus difficile.
Pour ce faire, vous avez la possibilité de renommer votre répertoire data
en quelque chose de cryptique (par exemple une longue suite de lettres et de chiffres) et d'ajuster le paramètre de configuration: savedir en conséquence.
Déplacement des répertoire hors de DocRoot
La façon la plus sécurisé d'empêcher l'accès aux répertoires mentionnés est de les déplacer hors du-dit “Document Root” (Racine des documents désservis) du serveur web. Ce n'est généralement pas nécessaire si vous avez suivi les guides ci-dessus et nécessite un peu plus de compréhension sur le fonctionnement du serveur Web et de DokuWiki. Néanmoins, c'est le moyen le plus sûr de sécuriser votre installation DokuWiki quel que soit le serveur Web utilisé.
ATTENTION : Si vous prévoyez d'utiliser l'installeur, vous devez installer DokuWiki en utilisant le script install.php avant de faire cette étape. Si les répertoires sont déplacés avant l'installation, cette dernière va échouer.
Répertoire data
- Déplacez le répertoire
data
(et tout son contenu) hors de la racine du serveur ; - Modifier le paramètre de configuration: savedir pour qu'il pointe vers la nouvelle adresse du répertoire
data
.
Par exemple, si le répertoire data
est déplacé dans /home/votrenom/data
, modifiez le paramètre via le gestionnaire de configuration ou ajoutez la ligne suivante directement dans le fichier conf/local.php
:
$conf['savedir'] = '/home/yourname/data/';
Répertoire conf
- Déplacez le répertoire
conf
(et tout son contenu) hors de la racine du serveur ; - Créez le fichier nommé preload.php dans le répertoire
inc
et affectez à la constanteDOKU_CONF
la nouvelle location du répertoireconf
.
Par exemple, si le répertoire conf
est déplacé dans /home/votrenom/conf
, créez le fichier inc/preload.php
suivant :
- inc/preload.php
<?php define('DOKU_CONF','/home/yourname/conf/');
Note: N'ajoutez pas une balise de fermeture pour PHP. Cela cause des problèmes avec les flux parmi d'autres choses. A ce sujet, voir la section fin de lignes dans la page Style de programmation
Répertoire bin
Le répertoire bin
contient les outils en ligne de commande. Si vous n'avez pas d'accès shell
sur votre serveur, vous pouvez directement supprimer le dossier et son contenu. Sinon, il suffit de déplacer le dossier en dehors de la racine du serveur (document root). Pas plus de configuration est nécessaire pour ce répertoire.
Répertoire inc
Il n'y a pour le moment aucun moyen facile à mettre en place pour déplacer ce répertoire en dehors de la racine. Mais puisqu'il ne contient aucune donnée sensible, il ne vaut même pas le coup d'essayer et d'y passer du temps.
Paramètres de configuration de DokuWiki
DokuWiki contient un certain nombre de paramètres de configuration qui peuvent avoir un impact sur plusieurs aspects de la sécurité de votre installation. Référez-vous à la documentation de chacun de ces paramètres pour apprendre leur impact exact et quelle est la valeur suggérée.
- allowdebug – désactivation de l'affichage du debug pour éviter les fuites d'informations internes au système
- fmode, dmode – permissions à affecter aux fichiers et dossiers créés par DokuWiki. Lisez aussi les informations données sur les permissions
- fetchsize – configuration du cache des données externes
- fullpath – affichage du chemin complet des pages
- tous les connecteurs d'authentification
- usewordblock – prévention du pollupostage à l'aide d'une liste noire (blacklist)
- mailguard – transformation des adresses courriels pour prévenir leur récupération par les robots
- iexssprotect – protection contre une vieille vulnérabilité de Cross-Site Scripting (XSS) d'Internet Explorer
- htmlok – activation du HTML
- phpok – activation du PHP
- hidepages – cache pour certaines pages de l'indexation et de la recherche
- safemodehack – contourne les restrictions du mode sans échec
- disableactions – disable certain actions, e.g. registration or view source
- baseurl – set a fixed server name the wiki should use to avoid server name spoofing attacks
Sécurité des extensions
DokuWiki a une tonne d'extensions créés par la communauté. Les extensions ajoutent de nouvelles fonctionnalités à DokuWiki en ajoutant du nouveau code. Cela signifie que le code a pratiquement accès à toutes les ressources de votre serveur. De plus, les extensions sont distribuées indépendamment de la base de DokuWiki. Ils ne sont pas sujets au même degré de validation et d'attention que le cœur de DokuWiki. Donc des précautions de sécurité sont nécessaires avant d'installer une extension.
Voici quelques conseils qui vont aideront à choisir quelle est l'extension à installer.
- Si vous le pouvez, vérifiez le code source de l'extension avant de l'installer ;
- Si vous avez un doute, demandez sur la liste de diffusion ;
- Les extensions sont installées sous le répertoire
lib
, qui est directement accessible de l'extérieur. Vérifiez ce que le plugin contient et qu'il bloque bien les accès aux bonnes ressources par l'intermédiaire d'un fichier.htaccess
; - Les extensions sont développées par des personnes qui n'ont pas de lien avec le projet DokuWiki, elles peuvent être inexpérimentées, avoir des intentions malveillantes ou peuvent fournir l'extension sur un serveur qui a été compromis. Ne faites pas confiance à n'importe qui !
- Vérifiez sur la page de l'extension s'il n'y a pas fait mention de problèmes de sécurité et mettez systématiquement à jour lorsque de nouvelles versions sont disponibles.
Voir aussi : Comment reporter des problèmes de sécurité
Pour aller plus loin...
Voici quelques liens internes ou externes que vous pouvez avoir envie de lire concernant la sécurité.
- Avec la liste de contrôle d'accès (ACLs) vous pouvez restreindre les pages et/ou les espaces de noms auxquels les utilisateurs ont accès. Vous pouvez accorder des autorisations de lecture et d'écriture en fonction du groupe d'utilisateurs ou des utilisateurs individuels.
- Forcer le login via HTTPS (en anglais)
- Comment cacher complètement les pages non-autorisées (en anglais)