Introduction : protéger son site avec SPIP
Restreindre l’accès à certaine partie de son site semble un besoin récurrent des webmasters de sites sous SPIP. Plusieurs solutions existent, la plus classique étant celle expliquée (un peu succintement) sur le site officiel qui permet de réserver certaines parties du site aux seuls membres authentifiés (rédacteurs ou visiteurs enregistrés). Ici nous allons détailler une autre méthode, à l’aide des mots clés, qui est loins d’être parfaite, mais qui suffira largement dans la plupart des cas simples.
Qu’est-ce que cette contrib permet de faire?
Permettre aux administrateurs du site de placer certains articles ou certaines rubriques en accès par mot de passe.
On pourra avec ceci créer autant de mots de passe que l’on voudra. Protéger la rubrique les saucisses avec le mot de passe sauciflon sec et la rubrique jambon avec le mot de passe jamblon sec.
Je protégerai pas mon compte en banque avec mais ça risque d’être suffisant pour la plupart des besoins. Plus precisement, allez voir un peu plus loin dans l’article : Les limitations du systeme.
C’est surtout très facile a mettre en place.
Installation
moins de 5 minutes
Décompresser acces.zip et installer controle_acces_rubrique.html controle_acces_rubrique.php3
controle_acces_article.html controle_acces_article.php3 FA2.php3 et enregistre_session2.php3 à
la racine de votre site.
Créer un groupe de mot clé que vous appelerez "acces multiple",vous cocherez les bonnes cases
pour que ce groupe ne soit accessible qu’aux administrateurs et puissent être associés aux articles et
aux rubriques.
Notez soigneusement le numéro id_groupe de ce groupe de mots clés, vous en avez impérativement
besoin !!! nous le nommerons désormais <votre id_groupe>
(attention ne confondez pas id_mot avec id_groupe)
dans ce groupe créer 2 mots "sauciflon sec" et "jamblon sec"
puis au TOUT DÉBUT (cad à la premiere ligne au premier caractère) de article.html
placer ce code.
<INCLURE(controle_acces_article.php3){id_groupe=<votre id_groupe>}{id_article}>
puis au TOUT DÉBUT (cad à la premiere ligne au premier caractere) de rubrique.html
placer ce code.
<INCLURE(controle_acces_rubrique.php3){id_groupe=<votre id_groupe>}{id_rubrique}>- Choisissez un article ou une rubrique de votre choix , associez le mot "sauciflon sec" et cliquez sur aller voir en ligne. Rentrer "sauciflon sec" dans le Formulaire d’Accès (FA) et si tous se passe bien votre article ou votre rubrique apparaît.
Et voila c’est fini
Et pour les courageux voici
Les Explications
Nous présenterons ce travail en deux temps
Temps 1 : on implémentera un accès restreint pour les articles seulement
car c’est plus facile.
Temps 2 : En se servant de ce qui a été fait au temps 1
on implémentera l’accès restreint pour les rubriques, ce qui exige une démarche
d’acquisition des informations qui peuvent être éventuellement présentes
dans les rubriques parentes.
Temps 1
controle_acces_article.html
Attention il ne doit y avoir aucun espace entre le début du fichier et ce script car on fait appel à la fonction header qui ne peut être appelé que si aucune information n’a été expédié au navigateur avant son invocation.
Le FA ou Formulaire d’Accès
Il est sans mystère voici son code FA2.php3 Il va collecter un mot de passe qui sera envoyé à un script de contrôle et d’enregistrement
Puis le script d’enregistrement
enregistre_session.php3
Ce script récupère la demande d’enregistrement qui est une variable de session qui contient le titre du mot clé. Puis il compare cette valeur avec le mot de passe entré dans FA2.php3 si celui-ci est bon il crée la variable de session $acces qui contient la date à laquelle l’utilisateur s’est enregistré
Et voila l’affaire est dans le sac si vous m’avez lu jusque la je félicite votre patience :)
Temps 2 : généralisations aux rubriques
La généralisations aux rubriques est un peu plus subtile car il faut pouvoir gérer les problèmes d’acquisition (qui sont très bien gérées dans Zope par ailleurs)
En effet si une rubrique se trouve être la sous rubrique d’une rubrique en accès par mot de passe elle doit pouvoir hériter de ses propriétés. Tous les articles d’une telle rubrique aussi.
Ce qui va se résoudre à coup de boucle hiérarchie.
controle_acces_rubrique.html
et on fait pareil avec controle_acces_article.html
Limitations du système
Un accès par http://mon_site.org/mot.php3 ?id_mot=XX permet de deviner le mot de passe en incrémentant simplement XX à partir de 1, sur un site contenant peu de mots clés, facile de le trouver, pour remedier à cela il faut supprimer le couple de fichiers mot.php3/mot.html, et y repenser en cas de mise à jour de SPIP.
Ou alors dans le squelette mots.html modifier la Boucle MOTS : <BOUCLE_de_mots(MOTS){les criteres deja present}{id_groupe!=<groupe des codes secret>}>
Il faut s’assurer que les divers squelettes alternatifs ou récapitulatifs (backend, resume, nouveautes, /oo, imprimer, plan, recherche, etc...) n’afficheront pas d’articles qui exigent un mot de passe. C’est très frustrant pour un visiteur de se faire présenter une liste d’articles dont on lui refuse l’accès. Pour cela il faudra exclure les articles correspondants :
Par exemple a l’aide d’une première boucle et du critère doublons :
Il faut penser à ajouter quelques directives dans son fichier robots.txt pour que Google et compagnie n’indexent pas des articles accessibles par mot de passe.
Ouf, quel travail pour protéger quelques articles !