Cette contrib vous permet de limiter la visibilité de plusieurs pages de votre site aux seules personnes identifiées, que ce soit par leur statut
- de visiteur
- de rédacteur
- d’administrateur.
Si un internaute accède à une page publique protégée, il sera invité à s’identifier par son login et son mot de passe. Une fois fait, s’il a le statut minimum requis, il accèdera directement à la page demandée.
Modifications requises
Les modifications requises sont mineures et peuvent facilement être appliquées à votre site.
Elles sont sans danger et peuvent tout aussi facilement être supprimées en tout temps.
Procédures
- Assurez-vous que vous n’avez pas déjà des fichiers portant les noms :
- rubrique_statut.html
- article_statut.html
- login_public.php3
- login_public.html
- rubrique_ok.php3
- article_ok.php3
- Téléchargez, décompressez et déposez à la racine de votre site les fichiers qui sont contenus dans ce document.
- Modifiez le fichier rubrique.php3 :
Changez la valeur de $fond :
//$fond = "rubrique";
$fond = "rubrique_statut";
- Modifiez le fichier article.php3 :
Changez la valeur de $fond :
//$fond = "article";
$fond = "article_statut";
- Créez un nouveau groupe de mots-clé appelé Accessibilité
- À la question Les mots-clés de ce groupe peuvent être associés, cochez pour cet exercice aux rubriques
[1]
- Créez dans ce groupe les mots-clés les mots :
- Administrateur
- Rédacteur
- Visiteur
Utilisation
Ajoutez le mot clé Administrateur, Rédacteur ou Visiteur pour limiter l’accès public d’une rubrique ou d’un article.
Explication
Prenons par exemple le cas d’une rubrique réservée :
le fichier rubrique.php3 n’appellera plus directement comme squelette le fichier rubrique.html mais plutôt le squelette contenu dans le fichier rubrique_statut.html.
Ce squelette n’affiche rien, il permet simplement de vérifier si la rubrique est limitée en accès public. Et si oui, de vérifier si l’internaute s’est identifié par son login et son mot de passe. Après, il vérifie s’il a le statut minimum requis. [2]
Une fois cette vérification faite, on affichera la rubrique telle que prévue par votre squelette rubrique.html
Les seuls fichiers vraiment nouveaux sont rubrique_statut.html :
<BOUCLE_accessibilite(MOTS){id_rubrique}{type=Accessibilité}>
<BOUCLE_a(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Administrateur}>
<?
if ($auteur_session['statut']!='0minirezo'){
?>
<INCLURE(login_public.php3){id_rubrique}>
<?
}
else {
?>
<INCLURE(rubrique_ok.php3){id_rubrique}>
<?
}
?>
</BOUCLE_a>
<BOUCLE_b(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Rédacteur}>
<?
if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
?>
<INCLURE(login_public.php3){id_rubrique}>
<?
}
else {
?>
<INCLURE(rubrique_ok.php3){id_rubrique}>
<?
}
?>
</BOUCLE_b>
<BOUCLE_c(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Visiteur}{lang_select=non}>
<?
if ($auteur_session['statut']!='6forum'&&$auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
?>
<INCLURE(login_public.php3){id_rubrique}>
<?
}
else {
?>
<INCLURE(rubrique_ok.php3){id_rubrique}>
<?
}
?>
</BOUCLE_c>
</BOUCLE_accessibilite>
<INCLURE(rubrique_ok.php3){id_rubrique}>
<//B_accessibilite>
et
article_statut.html :
<BOUCLE_accessibilite(MOTS){id_article}{type=Accessibilité}>
<BOUCLE_a(ARTICLES){id_article}{id_mot}{titre_mot=Administrateur}>
<?
if ($auteur_session['statut']!='0minirezo'){
?>
<INCLURE(login_public.php3){id_article}>
<?
}
else {
?>
<INCLURE(article_ok.php3){id_article}>
<?
}
?>
</BOUCLE_a>
<BOUCLE_b(ARTICLES){id_article}{id_mot}{titre_mot=Rédacteur}>
<?
if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
?>
<INCLURE(login_public.php3){id_article}>
<?
}
else {
?>
<INCLURE(article_ok.php3){id_article}>
<?
}
?>
</BOUCLE_b>
<BOUCLE_c(ARTICLES){id_article}{id_mot}{titre_mot=Visiteur}{lang_select=non}>
<?
if ($auteur_session['statut']!='6forum'&&$auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
?>
<INCLURE(login_public.php3){id_article}>
<?
}
else {
?>
<INCLURE(article_ok.php3){id_article}>
<?
}
?>
</BOUCLE_c>
</BOUCLE_accessibilite>
<INCLURE(article_ok.php3){id_article}>
<//B_accessibilite>
Pour simplifier cette contrib, le fichier login_public.html est simplement le fichier login.html standard de SPIP où on a remplacé le formulaire privé (#LOGIN_PRIVE) en formulaire public (#LOGIN_PUBLIC). À la différence qu’une fois identifié, l’internaute ayant le statut minimum requis verra s’afficher la rubrique ou l’article demandé et non l’interface privée.
Nous avons également conservé, pour simplifier, les mêmes noms de fichiers pour ce qui est des fichiers rubrique_ok.php3, rubrique_ok.html et article_ok.php3, article_ok.html. Mais cela n’est pas recommandé, car on donne accès aux squelettes et nous ouvrons la porte à des chemins de contournements possibles.
Pour renforcer la sécurité, on doit changer les noms des deux fichiers rubrique_ok.php3 et article_ok.php3 pour des noms de votre choix et modifier les fichiers rubrique_statut.html et article_statut.html en conséquence.
On peut changer également les noms des fichiers rubrique_ok.html et article_ok.html et modifier en conséquence les fichiers rubrique_ok.php3 et article_ok.php3. Cela complique la vie aux intrus qui voudraient contourner la limitation d’accès.
Exemple
On ajoute simplement une extension numérique au hasard à notre fichier [3] :
- Changer le nom du fichier rubrique_ok.html ou rubrique_ok_5943.html
- Modifier le fichier rubrique_ok.php3 (ou l’équivalent selon le nom que vous lui aurez donné)
//$fond = ’rubrique_ok’ ;
$fond = ’rubrique_ok_5943’ ;
Il faut aussi se méfier des fichiers appelés par des INCLURE. Si on donne accès au squelette, on donne aussi le nom de ces fichiers. Et si on donne le nom d’une inclusion qui appelle une partie cachée de l’article, on donne ainsi la possibilité d’appeler directement cette inclusion.
Personnellement, j’utilise même une variable de session qui protège ces pages si elles ne sont pas appelées par rubrique.php3 et article.php3 ainsi que les fichiers appelés par INCLURE. Cela pourrait faire l’objet d’une autre contrib.
Modifications additionnelles
Cette contrib est une simplification d’une utilisation plus complexe que nous faisons sur plusieurs sites de l’accès limités à l’interface publique.
Sur plusieurs d’entres eux, les articles, les rubriques, les brèves et même les sites référencés portant un des mots-clés du groupe Accessibilité n’apparaissent dans aucun menu du site lorsqu’on a pas le statut requis. Une fois identifié, les divers menus s’enrichissent.
Cela permet d’éviter la frustration de se voir refuser l’accès à une page alors qu’on nous l’offre dans le menu ou le plan du site. [4]
Cela devrait faire l’objet d’une autre contrib.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |