IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Faille de sécurité dans le login


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut Faille de sécurité dans le login
    Bonsoir,
    Je viens vers vous suite à un problème de sécurité que j'ai découvert dans mon code,

    Je m'explique (Je débute en PHP)
    Il s'agit d'une page de login normal qui va vérifier l'identité pour l'authentification sur une base de données login.php si c'est approuvé ça fait une redirection sur l'index.php avec les session username etc

    Dans mes autres page si l'utilisateur n'as pas de session username il est renvoyée sur l'index.php

    Cependant, Grâce à BurpSuite je peut modifier ma requête pour quelle passe de login.php en index.php puis de changer le status de 302 , en 200 OK pour pouvoir avoir mon index.php sans être authentifié.

    J'aimerai savoir deux choses ?

    Dans mes page il y a dans le header PHP deux code

    1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!isset($_SESSION['username'])) {
            $_SESSION['msg'] = "You must log in first";
            header('location: <a href="https://***.***-***.**/login.php&#39;);" target="_blank">https://***.***-***.**/login.php');</a>
            header("Connection: close");
      }
    Qui est censé renvoyer mon utilisateurs non identifier sur la page login sauf qu'on dirait qu'il est ignorer

    2 :
    Le reste comme une boucle qui vient recuperer les données en base et les inscrire sur la page lui fonctionne sans soucis

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    // LOGIN USER'50'
    if (isset($_POST['login_user'])) {
      $username = $_POST['username'];;
      $password = $_POST['password'];;
     
      if (empty($username)) {
            array_push($errors, "Username is required");
      }
      if (empty($password)) {
            array_push($errors, "Password is required");
      }
     
      if (count($errors) == 0) {
            //hash passwd
        $checkpass = $bdd_challenges->query("SELECT * FROM users WHERE name='$username'");
        $checkpassdata = $checkpass->fetch();
        $mysqlpassword = $checkpassdata["password"];
        $checkpass->closeCursor();
            if ($password == $mysqlpassword) {
     
          //Recupération des données de profile depuis la base de données du forum
          $bdd_forum = new PDO('mysql:host=localhost;dbname=forum;charset=utf8', '*****', '****');
          $userinfo = $bdd_forum->query("SELECT * FROM core_members WHERE name='$username'");
          $userinfodata = $userinfo->fetch();
                $email = $userinfodata["email"];
          $joined = $userinfodata["joined"];
          $bday = $userinfodata["bday_day"];
          $bmonth = $userinfodata["bday_month"];
          $byear = $userinfodata["bday_year"];
          $pp_view = $userinfodata["members_profile_views"];
          $pp_main = $userinfodata["pp_main_photo"];
          $pp_reputation = $userinfodata["pp_reputation_points"];
          $user_shop_points = $userinfodata["shop_points"];
          $user_post = $userinfodata["msg_count_total"];
          $userinfo->closeCursor();
     
          //check challenges
          $bdd_challenges = new PDO('mysql:host=localhost;dbname=challenges;charset=utf8', '*****', '*****');
          $userchall = $bdd_challenges->query("SELECT * FROM users WHERE name='$username'");
          $userchalldata = $userchall->fetch();
                $webch1 = $userchalldata["web1"];
          $webch2 = $userchalldata["web2"];
          $webch3 = $userchalldata["web3"];
          $webch4 = $userchalldata["web4"];
          $webch5 = $userchalldata["web5"];
          $webch6 = $userchalldata["web6"];
          $webch7 = $userchalldata["web7"];
          $crypt1 = $userchalldata["crypto1"];
          $crypt2 = $userchalldata["crypto2"];
          $crypt3 = $userchalldata["crypto3"];
          $crypt4 = $userchalldata["crypto4"];
          $crypt5 = $userchalldata["crypto5"];
          $points_max = $userchalldata["points"];
          $u_ctfdone = $userchalldata["ctfwin"];
          $u_chdone = $userchalldata["chdone"];
          $u_score = $userchalldata["score"];
          $userchall->closeCursor();
     
              $_SESSION['username'] = $username;
                $_SESSION['email'] = $email;
          $_SESSION['points'] = $user_shop_points;
          $_SESSION['clan'] = $clan;
          $_SESSION['score'] = $pp_reputation;
          $_SESSION['avatar'] = $pp_main;
          $_SESSION['msg_count'] = $user_post;
          $_SESSION['view'] = $pp_view;
          $_SESSION['profile_maxpoints'] = $profile_maxpoints;
          $_SESSION['webch1'] = $webch1;
          $_SESSION['webch2'] = $webch2;
          $_SESSION['webch3'] = $webch3;
          $_SESSION['webch4'] = $webch4;
          $_SESSION['webch5'] = $webch5;
          $_SESSION['webch6'] = $webch6;
          $_SESSION['webch7'] = $webch7;
          $_SESSION['crypt1'] = $crypt1;
          $_SESSION['crypt2'] = $crypt2;
          $_SESSION['crypt3'] = $crypt3;
          $_SESSION['crypt4'] = $crypt4;
          $_SESSION['crypt5'] = $crypt5;
          $_SESSION['ctfdone'] = $u_ctfdone;
          $_SESSION['u_score'] = $u_score;
          $_SESSION['u_chdone'] = $u_chdone;
          $_SESSION['max_points'] = $points_max;
              $_SESSION['success'] = "You are now logged in";
              header('location: index.php');
            }else {
                    array_push($errors, "Wrong username/password combination");
            }
      }
    }
    J'aimerais donc obtenir votre expérience, aide pour comprendre et résoudre ce problème.

    Je sais que mon code est peut-être degueu mais à vous de me faire vos retour d’expérience car je suis autodidacte , je vous remercie !

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    SELECT * FROM core_members WHERE name='$username' ça c'est la porte ouverte aux injections SQL, pour y parer tu dois systématiquement utiliser des requêtes préparées (voir les tutoriels sur PDO).

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            header('location: <a href="https://***.***-***.**/login.php');" target="_blank">https://***.***-***.**/login.php');</a>
            header("Connection: close");
    Où as-tu trouvé cette syntaxe ??


    2-
    ...Il s'agit d'une page de login normal...
    Ton code est drôlement compliqué pour une "page de connexion normale" !

    En cherchant un peu, tu trouveras de nombreux scripts de connexion PHP/PDO.

    Ex. : III-D. Accès à la partie Administration

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut
    J'ai essayer les injections SQL cependant je n'ai pas réussi, je vais regarde du côté des requêtes préparée merci.

    Le header Location sur internet,
    Oui c'est une page de login qui vient cherche aussi quelque éléments à afficher.

    Cependant mon problème ne vient pas de là ?

    Connaissez-vous une meilleure méthode de redirection que celle-ci ?
    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par unknown93 Voir le message
    Cependant mon problème ne vient pas de ?
    Non, en effet : le problème vient d'un peu partout dans ton code.

    • "php script connexion espace membre pdo"

    On trouve de très nombreuses discussions traitant du sujet.

    • header() : ce n'est pas la bonne syntaxe ! CLIQUE SUR LE LIEN que j'ai donné !!
    • mot de passe : on ne l'enregistre pas EN CLAIR dans la BDD -> voir password_hash() (je te laisse faire la recherche, puisque tu ne cliques pas sur les liens qu'on te donne)
    • on utilise des requêtes préparées
    • ...

Discussions similaires

  1. Attention faille de sécurité dans vos kernels 64 bits !
    Par MightyDucks dans le forum Sécurité
    Réponses: 0
    Dernier message: 17/09/2010, 23h47
  2. Réponses: 50
    Dernier message: 03/02/2010, 08h50
  3. Réponses: 5
    Dernier message: 10/12/2009, 19h02
  4. Réponses: 6
    Dernier message: 06/08/2009, 11h16
  5. Faille de sécurité dans mon site
    Par gitedoublel dans le forum Langage
    Réponses: 65
    Dernier message: 21/07/2009, 18h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo