Protection page par session

Fermé
Nin1363 Messages postés 3 Date d'inscription mardi 31 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018 - Modifié le 31 juil. 2018 à 14:19
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 31 juil. 2018 à 22:30
Bonjour,
je sollicite votre aide , car vraiment je n'arrive pas à comprendre comment protéger la partie administrative de mon site avec les sessions.
Mon problème: après avoir envoyé mon login et mon mot de passe, je suis bien connectée et je suis bien sur la page d’accueil de ma partie administration, mais si je copie-colle l'url de cette page, même si je me suis déconnectée, je peux accéder à cette page.
Je travaille avec une architecture MVC. Je ne sais pas comment faire pour protéger cette page.
Quelqu'un pourrait-il m'expliquer la démarche, la logique à suivre? Je vous en remercie d'avance :)
Voici mes bouts de code:
L' index.php
if (isset($_GET['action'])) {
        if ($_GET['action'] === 'connexion') {
            include 'view/frontend/connexionView.php';
        } elseif ($_GET['action'] === 'login') {
            if (!empty($_POST['login']) AND !empty($_POST['password'])) {
                    connection($_POST['login'], ($_POST['password']));
            } else {
                throw new Exception('Le login et/ou le mot de passe sont incorrects');
            }


Le controller/frontend.php
function connection($login, $password) 
{
    $adminManager = new AdminManager();
    $adminInfo = $adminManager->checkLogin($_POST['login'], ($_POST['password']));
    
    if ($adminInfo) {
       
        $_SESSION['administrateur'] = $adminInfo['administrateur'];
        $_SESSION['login'] = $adminInfo['login'];
       
        header('Location: index.php?action=listChaptersBackend');
    } else {
        include 'view/frontend/connexionView.php';
    }
}


Et le Model/AdminManager.php
class AdminManager extends Manager
{
    public function checkLogin($login, $password) 
    {  
        $db = $this->dbConnect();
        $req = $db->prepare('SELECT login, password FROM administrateur WHERE login = ?');
        $req->execute(array($login));
        $admin = $req->fetch();
        $hash = sha1($_POST['password']);
       
        if ($admin['password'] == $hash) {
            $adminInfo = array(
               'login' => $admin['login']
            );
            return $adminInfo;
        } else {
            return false;
        }

    }
    
}



EDIT : Correction des balises de code pour avoir la COLORATION SYNTAXIQUE.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
31 juil. 2018 à 14:25
Bonjour,

Sur tes pages, tu dois vérifier si ta variable de session existe.... sinon rediriger vers une autre page (la page de connexion par exemple )
un truc du genre
if(empty($_SESSION['administrateur'])){
   header('Location:login.php');
   exit(); //toujours mettre un exit après un  header location !
}


NB: Pour poster ton code sur le forum, merci de le faire en y mettant le langage afin d'avoir la coloration syntaxique.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

NB² : Si tu travailles en PDO, penses à activer la gestion des erreur ET à placer CHAQUE requête dans un bloc TRY/CATCH
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

NB3: Désormais on n'utilise plus le SHA1 (ni le MD5) pour hasher les password.... ce n'est plus du tout sécurisé.
A la place on utilisera les fonctions php password_hash et password_verify


0
Nin1363 Messages postés 3 Date d'inscription mardi 31 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 16:24
Merci pour la réponse :)
J'ai mis le bloc TRY/CATCH dans mon fichier index.php donc les erreurs sont gérées il me semble.
J'ai utilisé sha1 parce que mont mot de passe est déjà dans la base de données hashé par sha1, je ne fais que le comparé à celui qui est envoyé.
Ce bout de code,
if(empty($_SESSION['administrateur'])){
header('Location:login.php');
exit(); //toujours mettre un exit après un header location !
}

je ne sais pas où le mettre, dans mon architecture MVC : dans la vue, le model ou le controller?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
31 juil. 2018 à 16:56
moi je le placerai surement dans le controller
0
Nin1363 Messages postés 3 Date d'inscription mardi 31 juillet 2018 Statut Membre Dernière intervention 31 juillet 2018
31 juil. 2018 à 20:16
J'ai en retour ce message d'erreur :(

Fatal error: Uncaught Error: Class 'Alaska\Blog\Model\ChapterManager' not found in C:\wamp64\www\blog\view\frontend\template.php on line 3
( ! ) Error: Class 'Alaska\Blog\Model\ChapterManager' not found in C:\wamp64\www\blog\view\frontend\template.php on line 3
Call Stack
# Time Memory Function Location
1 0.0010 364600 {main}( ) ...\connexionView.php:0
2 0.0020 373048 require( 'C:\wamp64\www\blog\view\frontend\template.php' ) ...\connexionView.php:24
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
31 juil. 2018 à 22:30
Sans voir ton code..impossible de te repondre !!!
0