Mo: Non, j'ai dit pas de baskets...

 Toujours dans l'esprit du projet que je mets en place pour mes potes de boulot, et qui est en phase de béta test au moment où j'écris ces lignes, j'avais besoin de restreindre totalement pluxml aux non-inscrits: je voulais que seules les personnes disposant d'un profil puissent accéder au site... c'est Mo qui s'en charge (mo pour Members Only).


Il existe un plugin qui semble faire un truc dans le genre, mais je voulais quelque-chose de très simple...

 

Avis aux trolls, je dois avouer que je me suis contenté d'une sorte de minimum pour vérifier si un user était connecté... du coup, si vous pouvez améliorer la sécurité sans trop compliquer, je prends

 


 

Mo utilise plusieurs hooks pour verrouiller et rediriger correctement l'utilisateur:

 

Dès le début de l'index, on vérifie les variables de session (à mon avis, on peut faire mieux, là )

    public function IndexBegin(){
        // bloque l'accès si pas connecté et renvoie à la page de login
        echo '<?php 
            if (
                !isset($_SESSION["domain"]) 
                || !isset($_SESSION["user"]) 
                || !isset($_SESSION["profil"]) 
                || !isset($_SESSION["hash"]) 
                || !isset($_SESSION["lang"]) 
                || $_SESSION["user"]==""
            ){
                header("Location: core/admin/auth.php?p=".htmlentities($_SERVER["REQUEST_URI"]));
                exit;
            } ?>';
    }

 

Cette partie gère la redirection vers la page où le visiteur voulait se rendre après le login

    public function AdminAuthPrepend(){
    echo '&lt;?php 
    $redirect="";
    if(!empty($_GET["p"])) {            
        $redirect = strip_tags(urldecode($_GET["p"]));
    }else{ $redirect = "'.PLX_ROOT.'"; }
    # Authentification
    if(!empty($_POST["login"]) AND !empty($_POST["password"])) {
        $connected = false;
        foreach($plxAdmin-&gt;aUsers as $userid =&gt; $user) {
            if ($_POST["login"]==$user["login"] AND sha1($user["salt"].md5($_POST["password"]))==$user["password"] AND $user["active"] AND !$user["delete"]) {
                $_SESSION["user"] = $userid;
                $_SESSION["profil"] = $user["profil"];
                $_SESSION["hash"] = plxUtils::charAleatoire(10);
                $_SESSION["domain"] = $session_domain;
                $_SESSION["lang"] = $user["lang"];
                $connected = true;
            }
        }

        if($connected) { 
            header("Location: ".$redirect);
            exit;
        } else {
            $msg = L_ERR_WRONG_PASSWORD;
            $error = "error";
        }
    }

    ?&gt;';
}   
public function AdminAuthTop(){

    echo '
    &lt;?php 
        $redirect="";
        if(!empty($_GET["p"])) {            
            $redirect = strip_tags(urldecode($_GET["p"]));
        }
    ?&gt;';
}

 

Le zip est par là !

 

 

Je pense que le code est sans aucun doute largement perfectible... toutefois, il présente un bon ratio efficacité/prise de tronche & temps perdu

Surtout que j'avais encore plein de plugins à réaliser dans le cadre de ce projet

 

Mais chhhhht : "keep your secret secret"

❝ 4 commentaires ❞

1  Thomas le

Rebonsoir ! C'est encore moi... Je rencontre un nouveau problème, cette fois avec ce plugin. Le soucis est qu'il rend invalide le flux RSS généré avec Pluxml. Lorsque je tente d'ajouter le flux j'ai une erreur de parsage "XML parsing error: <unknown>:2:0: XML or text declaration not at start of entity". La déclaration commence en ligne deux, ça ressemble fort à un whitespace planqué quelque part dans le plugin. Je l'ai cherché mais pas trouvé... Tout fonctionne quand MO est désactivé. Aurais-tu une idée ?

 
2  Bronco le

Houlà ! faut que je me remette dans un code de ... 2014


Je vais jeter un oeil dessus...

 
3  Bronco le

Bon, j'ai fini par trouver


en traçant à l'ancienne.


Il y avait bien un whitespace mais pas dans le plugin: dans le fichier de langue.


http://repo.warriordudimanche.net/ZIPFILES/MO.zip

 
4  Thomas le

De 2014 certainement, mais toujours très utile ! Ah, je n'ai pas pensé à aller voir ce fichier... Par contre, le fichier langue est en double dans l'archive, il y a un conflit de synchro Syncthing ou autre il semblerait. Merci encore une fois !

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

les commentaires relevant du SPAM seront filtrés et dégagés direct...

Quelle est le premier caractère du mot 3n9f2vs ?