SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Auteurs et Authentification > Authentification

LOGIN_PUBLIC et contenu à accès restreint

samedi 15 janvier 2005, par Yorghos. Dernier ajout jeudi 8 février 2007


Le principe de la présente contribution ne concerne que la méthode d’accès aux pages disponibles uniquement après authentification.


La gestion d’un espace à accès restreint, quel que soit le contenu, signifie que des informations propres à chaque visiteur peuvent être conservées dans les tables. Par exemple, le contenu d’un espace personnel n’est accessible qu’après authentification [1].

Le principe de la présente contribution ne concerne que la méthode d’accès aux pages disponibles uniquement après authentification.

La page du login

Avant toute chose quelques rappels :
- Pour activer les accès visiteurs et le #LOGIN_PUBLIC, il faut attribuer l’option forum sur abonnement à au moins un article (il peut s’agir d’un article non publié).

- Faire le choix de l’inscription automatique des visiteurs ou supprimer la ligne dans le inc_formulaire.php3.

Sur la page d’accueil du site on crée un lien avec deux affichages :

Le script détecte la présence d’un visiteur authentifié (if $auteur_session) et affiche “mon espace privé” avec un lien vers la page mon_espace.php3. Si le visiteur n’est pas connecté, l’affichage indique “vers l’espace réservé” et le lien pointe vers login_public.php3.

Sur cette page de login (login_public.php3), on peut imaginer de mettre à disposition, outre le formulaire d’authentification, une série de liens vers les pages qui ne sont accessibles qu’aux visiteurs authentifiés.

Authentification et visibilité des pages

Ces liens (s’ils existent sur la page login_public) sont toujours actifs, même si le visiteur n’est pas encore authentifié. Ceci signifie qu’en cliquant sur ces liens, on accède aux pages en accès restreint. Il faut avoir recours à un petit script placé dans l’en en-tête des squelettes qui protège l’accès :

De cette façon le contenu n’est plus accessible aux visiteurs non authentifiés. Je rappelle que l’exemple ci-dessus reprend la documentation de SPIP sur les formulaires et l’utilisation de la balise #LOGIN_PUBLIC.

Les informations disponibles après la connexion d’un visiteur :

-  <?php echo $auteur_session['nom'] ?> -> Nom
-  <?php echo $auteur_session['email'] ?> -> Email
-  <?php echo $auteur_session['statut'] ?> -> Statut

Précautions de sécurité

Dans le cas où l’on veut éviter que des contenus soient affichés par des visiteurs non-autorisés qui modifieraient manuellement les urls dans un squelette non protégé, en passant le paramètre id_article par exemple au squelette approprié, il faut penser à deux choses :

- Préférer le classement de tous les articles à usage restreint dans des rubriques dont l’affichage est interdit sur le site public par exemple, id_rubrique !=XX dans la boucle RUBRIQUES (y compris sur les pages type mot ou recherche),
- Créer un squelette article-XX, où XX est l’id_rubrique dont l’affichage est interdit et placer dans l’en-tête le script de test d’authentification présenté ci-dessus.

En conclusion, en utilisant les fonctions de SPIP et à l’aide de scripts php minimalistes, il est possible de mettre en place des règles d’accès de contenu faciles à gérer, avec le niveau de sécurité qu’offre SPIP.

Notes

[1] La mise en oeuvre d’un tel accès pourrait permettre de rajouter les “id_article” sélectionnés par le visiteur dans un champs extra de la fiche d’un auteur et de les convertir en liens vers les articles favoris dans l’espace personnel auquel accède l’auteur.


Répondre à cet article

  • Faille ?

    7 juin 2007 10:17, par Johan

    Bonjour,

    Je suis débutant en Spip et je désire créer un site à accès restreint. Pour sécuriser mes pages, j’ai rajouté dans mes squelettes :

    <?php  if ($auteur_session) {?>

    // Affichage de mon squelette

    <?php
    } else {?>

    // Affichage du formulaire login_public

     ?>

    L’authentification fonctionne dans le cas normal mais si je met http://monsite/spip.php ?auteur_session=true en URL, je peux accéder au sommaire de mon site. Même si je ne peux plus rien faire ensuite, je trouve cela plutôt embêtant.

    J’ai également testé en mettant if ($auteur_session[’statut’]) mais j’obtient le même résultat.

    Je précise que je n’ai pour l’instant sécurisé que les squelettes principaux (sommaire, article, rubrique, breve et 404).

    Est-ce que j’ai mal appliqué cette contrib ou est-ce une faille et si c’est le cas comment mettre en place la sécurisation des page à accès restreint ?

    Je vous remercie par avance pour l’aide que vous pourrez m’apporter.

    Répondre à ce message

    • Faille ? 7 juin 2007 10:49, par Johan

      J’ai testé avec un squelette qui possède par défaut un accès restreint (EspFor 2.4) et j’arrive aussi à voir le sommaire en tapant http://monsite/spip.php ?auteur_session=true (il faut parfois réactualiser pour que ca fonctionne).

      Il semblerait donc que le problème ne vienne pas de moi...

      Répondre à ce message

      • Faille ? 1er octobre 2007 22:06

        c’est du 50/50 :
        - 50 pour SPIP qui accepte de laisser php de définir la variable auteur_session
        - 50 pour la mauvaise configuration de votre php : register_globals est à on dans votre php.ini ce qui constitue une gros trou de sécurité.

        Répondre à ce message

    • Faille ? 7 juin 2007 17:44

      Bonjour, Ce système a été développé pour SPIP 1.8. Sur une version 1.9, il est préférable d’utiliser la balise SESSION qui marche très bien. Sinon, peut-être faire un squelette d’authentification distinct.

      Répondre à ce message

    • Faille ? 20 décembre 2007 21:30, par bruno010

      Bonjour,

      Je suis également débutant sur spip. J’ai installé Spip 1.9.2c et je souhaite mettre en place un acces restreint pour une copropriété.

      Peux-tu m’expliquer exactement comment tu as résolu ton problème ?.

      Merci d’avance pour ton aide.

      Répondre à ce message

      • Un intranet 7 février 2008 09:04

        Que faut-il utiliser pour mettre en place un site à accès restreint, si cette méthode n’est pas fiable, sans utiliser de .htaccess. Le plugin SESSION n’étant pas fait pour cela.

        Répondre à ce message

    Retour au début des forums

  • accès restreint & mutualisation

    9 janvier 2008 08:46, par Pierre

    Bonjour et bonne année 2008

    J’ai un petit problème avec le plugin accès restreint (Version : 0.2) : celui-ci fonctionne parfaitement sur les sites SPIP que je gère (1.9.2.b) sauf sur ceux qui utilisent une mutualisation du noyau. Dans ce cas, seul le premier site qui active ce plugin fonctionne normalement. Pour les autres, l’activation du plugin n’est pas possible : Dans gestion des plugins, une tentative d’activation renvoi une erreur "Accès interdit - activer_plugins".

    Merci d’avance pour votre aide

    Répondre à ce message

    Retour au début des forums

  • Incompatibilité avec Spip1.9.2c ?

    13 novembre 2007 22:27, par Com-Unik

    Bonjour !

    Mon site était sous Spip1.9.1 et je l’ai mis à jour vers 1.9.2c

    Depuis, je ne peux plus ajouter les visiteurs à une zone, l’option ne s’affiche plus dans leur profil dans l’espace privé !!

    Y a-t-il une solution ?

    Répondre à ce message

    Retour au début des forums

  • Accès restreint contourné par l’éspace privé

    16 octobre 2007 02:38, par WeB

    Une rubrique en accés restreint pour la zone publique et la zone privée... est accéssible à un administrateur restreint.

    Bug ou faille de sécurité, un administrateur restreint peut se rajouter a toutes les zones restreintes depuis son profil Auteur !

    "Ajouter toutes les zones" est visible en lien.

    Quelqu’un à une info SVP ?

    Merci

    Répondre à ce message

    Retour au début des forums

  • Diificultés avec le cache du navigateur

    9 février 2007 13:57, par martinus

    Bonjour,

    Le principe qui consiste à tester en php la variable $auteur_session ne semble pas fonctionner toujours parfaitement à cause du cache du navigateur (à ne pas confondre avec le cache de SPIP).

    Si une page est demandée une première fois, sans identification, elle est stockée dans le cache du navigateur. Quand on y revient, avec la même URL, après identification, la version précédente est prise dans le cache du navigateur et affichée, et l’identification est sans effet apparent. Il faut appuyer sur CTRL+F5 pour voir le contenu conditionné par l’identification.

    J’ai fini par découvrir que le protocole HTTP prévoit un moyen de solutionner cela et que si on ajoutait au début des squelettes :

    #HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate, max-age=0"}
    #HTTP_HEADER{"Pragma: no-cache"}
    #HTTP_HEADER{"Expires: Mon, 26 Jul 1997 05:00:00 GMT"}

    Avec Mozilla FireFox 1 ou 2, notamment, cela fait disparaître tout problème. Tout n’est d’ailleurs peut être pas nécessaire pour ce navigateur, peu importe.

    Mais avec MS - Internet Explorer 6 ou 7, cela ne marche pas toujours. Il faut généralement appuyer sur CTRL+F5 pour voir le bon contenu. Je répète, le cache de SPIP n’est pas en cause et un recalcul de la page ne suffit pas toujours.

    Si on paramètre IE de manière à ce qu’il "vérifie s’il existe une version plus récente des pages enregistrées à chaque visite de page", le problème disparait aussi.

    Mes visiteurs sont souvent peu expérimentés, sont équipés à 99% d’IE, et cela leur parait très difficile de changer ce paramètrage, et bien sûr incroyablement complexe d’installer FireFox. Ils trouvent plus simple de dire "ça ne marche pas". De toutes façons je ne trouve pas correct d’imposer à mes visiteurs un paramétrage ou un navigateur.

    Ce qui est étrange, c’est que le souci ne semble pas être souvent remonté et que la documentation ne mentionne même pas la nécessité des headers cache-control etc... Pour ma part je n’avais pas remarqué ce problème quand j’étais en 1.8 (mais ça prouve rien) et sur mon serveur de développement (Apache/Windows) je ne le rencontre pas non plus.

    Cela pourrait-il être indirectement lié à la dernière version de SPIP ou encore dépendre de l’hébergeur (OVH en l’espèce) ?

    Je sèche et mes utilisateurs ont du mal...

    Est-ce que certains n’ont jamais rencontré ce souci ? Vos retours d’expérience seraient précieux pour essayer d’avancer !

    Merci.

    Martin

    Répondre à ce message

    • Diificultés avec le cache du navigateur 9 février 2007 14:05, par Yorghos

      De mon côté chez OVH, avec une version 1.8, le fonctionnement dans un INCLURE avec le cache réglé à 1*1, je n’ai pas de difficulté. Par contre il y a un bug avec l’#URL_LOGOUT que je n’ai jamais résolu.

      Répondre à ce message

    • Diificultés avec le cache du navigateur 18 mars 2007 19:28, par cedric

      J’ai le meme probleme avec spip 1.9.1.

      Lorsque je me connecte (login/mot de passe) tout va bien, mais si je me déconnecte et me reconnecte alors rien ne va plus. Il cree une url bizare et refuse que je me connecte.

      J’a iessayé plein de trucs, je suis désespéré car c’est une grande faille...

      des idées nouvelles ?

      merci !

      Répondre à ce message

      • Bonjour,

        Je crois que ton problème est tout à fait différent du mien et n’a rien à voir avec le cache.

        Si tu te déconnectes avec [(#URL_LOGOUT)] avec une page de retour dont l’URL contient plus d’un paramètre, donc le signe ampersand, celui-ci n’est pas codé et retransmis correctement et la page de retour n’est pas trouvée après deconnexion.

        C’est un bug déja signalé, mais je n’ai pas vu, ni trouvé, le correctif. Tu peux cependant le contourner en spécifiant une page de retour avec 1 paramètre, la page d’accueil par exemple, en écrivant [(#URL_LOGOUT{spip.php?page=sommaire})]

        Cordialement,

        Martinus

        Répondre à ce message

    Retour au début des forums

  • LOGIN_PUBLIC et contenu à accès restreint

    6 mars 2007 15:36, par llenne

    Voici une méthode pour restreindre l’accès aux données créées par l’auteur (testé avec SPIP 1.9.1)

    L’auteur s’est au préalable connecté à l’aide de la balise #LOGIN_PUBLIC

    Création d’un critère dans mes_fonctions.php (à la racine du site)

    le critère :

    dans le squelette :

    dans le fichier mes_fonctions.php :

    Et voilà comment faire un critère suplémentaire sur les boucles.

    Ludovic LENNE (ludovic[@]lenne.org)

    Répondre à ce message

    • LOGIN_PUBLIC et contenu à accès restreint 6 mars 2007 17:00, par llenne

      Petite correction dans le code de la fonction :

      function critere_session_id_auteur_dist($idb, &$boucles) {
             
              // Pour quel auteur connecté
              global $session_auteur;
              if (!$session_auteur) {$this_session_auteur = "invisible"; }else{$this_session_auteur = $session_auteur['id_auteur']; }
             
              // Application du critère
              $boucle = &$boucles[$idb];
                      // Table de l'objet
                              $boucle->where[]= "'id_auteur = \'".$this_session_auteur.\''";

      }

      le filtre (id_auteur = ...) doit être entouré par des guillemets simple (penser à echapper ceux du filtre : ’ id_auteur = \’...\’)

      Ludovic LENNE (ludovic[@]lene.org)

      Répondre à ce message

    Retour au début des forums

  • > LOGIN_PUBLIC et contenu à accès restreint

    13 juillet 2005 09:17, par byld

    Cette contrib est fort interessante. Il y a t’il avec cette méthode, possibilité de récuperer l’id_auteur connecté pour afficher le critère {id_auteur=&id_auteur} ou quelque chose de ce genre pour l’inserer dans une boucle, n’étant pas un expert de php.
    En tout cas Bravo et merci, grace à cette contrib, je peux enfin créer la page perso des auteurs de mon site !

    Répondre à ce message

    • > LOGIN_PUBLIC et contenu à accès restreint 13 juillet 2005 09:28, par Yorghos

      Les possibilités de la 1.8 et l’utilisation du tableau $contexte_inclus ont rendus cette approche qui utilise le php directement dans le squelette dépassé. Tout est expliqué dans la contrib : http://www.spip-contrib.net/ecrire/articles.php3 ?id_article=909 qui est toujours proposé à l’évaluation. Tous les fichiers et bouts de code nécessaires pour son fonctionnement sont disponibles dans le zip associé. Si jamais une explication manquait, je suis prêt à te fournir des détails complémentaires.

      Répondre à ce message

      • > LOGIN_PUBLIC et contenu à accès restreint 13 juillet 2005 10:59, par byld

        Je te remercie pour cette réponse rapide.
        Je suis en 1.7.2 et voilà plus d’une semaine que je cherche une solution.
        Mon site est un site d’ecrivains (78 en tout) et je veux fournir un espace privé (créé grace à cette contrib d’ailleurs) où j’affiche entre autre les textes les plus populaires de l’auteur en ligne sur son espace. J’ai utilisé ceci pour faire afficher son nom :

        <?php echo $auteur_session['nom'].'<br />';
        switch ($auteur_session['statut'])
        {
               case '0minirezo' : echo 'administrateur<br />'.$REMOTE_ADDR; break;
               case '1comite'   : echo 'r&eacute;dacteur<br />'.$REMOTE_ADDR; break;
               case '6forum'    : echo 'simple visiteur'; break;
        } ?>

        Mais c’est un petit code que j’ai récupéré dans le forum de SPIP et je ne peux connaitre l’id_auteur par ce biais.
        Je suis vraiment un débutant très mauvais en php et je pensais peut-être utiliser les mots clés mais puis-je récuperer le nom de l’auteur dans ce petit script et faire {id_mot=quelque chose} ? Ou cela revient au même ?
        Merci beaucoup pour ton aide que j’accepte volontiers.

        Répondre à ce message

    • > LOGIN_PUBLIC et contenu à accès restreint 13 juillet 2005 18:03, par Yorghos

      Il faut imprimer par la commande print_r le contenu du tableau $auteur_session. Je ne suis pas certain que l’id_auteur en fasse partie. Mais le critère nom peut également servir dans la boucle auteur. Si on récupère $auteur_session[’nom’], ce nom sera utilisable dans une boucle AUTEURS avec le critère nom. Pour le lien mort je ne comprends pas, car c’est bien la bonne url. Peut-être faire in copier - coller dans le navigateur ?

      Répondre à ce message

      • > LOGIN_PUBLIC et contenu à accès restreint 13 juillet 2005 19:00, par byld

        Merci. Si je fais un print_r de &auteur_session j’obtiens bien la base spip_auteur et je vois l’id_auteur sous la forme [id_auteur]==>12 par exemple. Je vois en fait tout le contenu de la table.
        Maintenant le problème reste entier pour moi (je suis désolé d’être aussi mauvais). Comment récuperer cette ID pour l’inserer dans ma boucle Hit parade par exemple. Je ne comprends pas comment transformer mon critère {id_auteur} en {id_auteur=id de la table}
        Ou bien comment récuperer (en fait le petit bout de code php) $auteur_session[’nom’], pour utiliser la balise {nom}
        Pardonne moi si j’insiste lourdement mais je trouve ta contrib tout à fait exceptionnelle et très avant gardiste. Cela finaliserait celle ci en la proposant ainsi aux néophytes dont je fais partie. Encore merci pour ton aide passée et à venir..

        Répondre à ce message

        • > LOGIN_PUBLIC et contenu à accès restreint 14 juillet 2005 14:11, par byld

          Pardon en fait ma formulation est très mauvaise :
          Comment faire fonctionner cela :

          <BOUCLE_hitparade(ARTICLES){id_auteur=$auteur_session['id_auteur']}{par popularite}{inverse}{0,5}>
                             <div align="center"></div>
                             <li>
                               <div align="center"> #TITRE (popularité : #POPULARITE %)</div>
                             </li>
                             <div align="center">
                               </BOUCLE_hitparade>

          Répondre à ce message

          • > LOGIN_PUBLIC et contenu à accès restreint 14 juillet 2005 14:31, par Yorghos

            Justement il faut te servir des possibilités de la 1.8 pour transformer une variable en critère. Il existe différentes façons.
            - En passant dans un inclure par $contexte_inclus la valeur de $GLOBALS[’auteur_session’][’nom’] et en le récupérant dans une boucle auteurs avec le critère nom.
            - En passant le nom de l’auteur ou son id_auteur dans l’url (à condition qu’elle soit connue) puis en la récupérant dans les critère de boucle par la balise #ENVid_auteur

            Répondre à ce message

    Retour au début des forums

0 | 25



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net