Ceci est une ancienne révision du document !
Cette page détaille comment sécuriser les sections privées de DokuWiki.
Dernière mise à jour pour la version 2010-11-07.
Pour stocker des informations à caractère privé, il est possible de limiter l'accès à une page ou une section facilement :
La règle créée désactive l'accès à cette section, la recherche et les changement récents prennent en compte ce paramètre.
Il est ensuite possible d'ajouter des droits plus fin à quelques utilisateurs ou groupes.
Pour info, l'administrateur a toujours accès à toutes les pages.
Afin de cacher les pages dans l'index, il faut activer l'option générale “sneaky_index”
Les messages indiquant si l'interdiction d'accès ou inexistante de la page sont différents, il est donc possible de savoir si la page existe.
Si certain namespace sont cachés, pour masquer complètement leur existence, il faut bloquer l'accès à la racine “*” puis autoriser les pages et namespace publique manuellement.
Par exemple :
page | group | rights |
---|---|---|
* | @ALL | None |
start | @ALL | Read |
sidebar | @ALL | Read |
linux:* | @ALL | Read |
en:* | @ALL | Read |
Les ACL permettent de rendre les pages inaccessibles mais ne masquent pas complètement leur existence.
Cette section recense les failles de sécurité que j'ai détectée lorsque des sections privées sont utilisées et fournit un correctif.
Démonstration des failles avec un wiki simple, configuré ainsi :
Voici les screenshots :
Le détail des problèmes est décrit dans les paragraphes suivants.
Même si le contenu d'une page est bloqué, il est malgré tout possible de connaitre son titre si l'option “use_heading” est activée.
Correctif : dokuwiki-2010-11-07_secu1.patch
:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu1.patch patching file parserutils.php :/opt/dokuwiki/inc#
Il est possible de distinguer si une page existe ou non en fonction du style utilisé dans “youarehere” (il s'agit du texte en haut à gauche en titre dans la page).
Correctif : dokuwiki-2010-11-07_secu2.patch
:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu2.patch patching file template.php :/opt/dokuwiki/inc#
Le breadcrumb (ou piste en français) indique les pages visitées, permet de connaitre si une page existe (les pages inexistantes ne sont pas ajoutées).
Correctif : dokuwiki-2010-11-07_secu3.patch
:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu3.patch patching file common.php :/opt/dokuwiki/inc#
Lorsqu'une page contient des liens vers d'autres pages, ceux-ci indiquent si la page existe même lorsque l'accès y est interdit.
De plus si useheading est activé, le titre de la page est également indiqué.
Correctif : dokuwiki-2010-11-07_secu4.patch
:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu4.patch patching file parser/xhtml.php :/opt/dokuwiki/inc#
Attention, les pages générées sont cachées par dokuwiki, un utilisateur peut donc voir les liens si la page cachée a été générée pour utilisateur qui dispose des autorisations pour ces liens.
Il faut donc éviter d'insérer dans des pages “publiques” des liens vers des pages “privées”.
Patch pour la version 2008-05-05: doku_hide-2008-05-05.patch
wiki:/opt/wiki# patch -p 1 < /root/doku_hide.patch patching file inc/common.php patching file inc/parser/xhtml.php patching file inc/parserutils.php patching file inc/template.php wiki:/opt/wiki#
Patch pour la version 2009-02-14: dokuwiki-2009-02-14_security.patch
wiki:/opt/wiki/inc# patch -p 1 < /root/doku_hide.patch patching file common.php patching file parser/xhtml.php patching file parserutils.php patching file template.php wiki:/opt/wiki/inc#