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

Langage PHP Discussion :

Pb sur un script d'authentification en exemple dans un livre.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Pb sur un script d'authentification en exemple dans un livre.
    Bonjour,
    je m'initie à php et mysql à l'aide de ce livre : "Développer un site web en PHP, MySQL et Javascript: jQuery, CSS3 et HTML5." isbn 978-2-89377-547-0
    Arrivé au chap12 sur l'authentification, je tombe sur des scripts qui ne fonctionne pas ou du moins comme annoncé.
    Ce n'est pas une faute de frappe de ma part, j'utilise les fichiers fournis par l'éditeur, que j'ai téléchargé sur mon hébergement chez ovh.
    Voici le code en question :
    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
    <?php // authentification.php
      require_once 'login.php';
      $connexion = new mysqli($hn, $un, $pw, $db);
     
      if ($connexion->connect_error) die($connexion->connect_error);
     
      if (isset($_SERVER['PHP_AUTH_USER']) &&
          isset($_SERVER['PHP_AUTH_PW']))
      {
        $nu_temp = mysql_entities_fix_string($connexion, $_SERVER['PHP_AUTH_USER']);
        $mp_temp = mysql_entities_fix_string($connexion, $_SERVER['PHP_AUTH_PW']);
     
        $query  = "SELECT * FROM utilisateurs WHERE nomutil='$nu_temp'";
        $result = $connexion->query($query);
        if (!$result) die($connexion->error);
        elseif ($result->num_rows)
        {
            $row = $result->fetch_array(MYSQLI_NUM);
     
              $result->close();
     
            $sel1 = "qm&h*";
            $sel2 = "pg!@";
            $jeton = hash('ripemd128', "$sel1$mp_temp$sel2");
     
            if ($jeton == $row[3]) echo "$row[0] $row[1] : 
            	Bonjour $row[0], vous êtes connecté en tant que '$row[2]'";
            else die("Nom d'utilisateur ou mot de passe non valide");
        }
        else die("Nom d'utilisateur ou mot de passe non valide");
      }
      else
      {
        header('WWW-Authenticate: Basic realm="Zone restreinte"');
        header('HTTP/1.0 401 Unauthorized');
        die ("Entrez votre nom d'utilisateur et votre mot de passe pour vous identifier");
      }
     
      $connexion->close();
     
      function mysql_entities_fix_string($connexion, $string)
      {
        return htmlentities(mysql_fix_string($connexion, $string));
      }	
     
      function mysql_fix_string($connexion, $string)
      {
        if (get_magic_quotes_gpc()) $string = stripslashes($string);
        return $connexion->real_escape_string($string);
      }
    ?>
    Que j'entre un bon ou mauvais login/pw, je n'obtiens pas l'affichage de la phrase prévue, mais il me réaffiche systématique la fenêtre de demande de login/pw. Seul le fait de cliquer sur "annuler" affiche la phrase prévue "Entrez votre nom d'utilisateur et votre mot de passe pour vous identifier".
    J'ai testé php 5.4 5.6 et 7.2, cela ne change rien.
    Où se situe le problème svp ?

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if (get_magic_quotes_gpc()) $string = stripslashes($string);
    Rien que ça prouve que le script est obsolète...

    Et il est préférable d'utiliser PDO plutôt que mysqli quand on débute.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Je confirme qu'il vaut mieux changer de livre et en prendre un plus moderne enseignant PHP 7.0 au moins.
    - Test de magic quotes
    - utilisation de real_escape_string et injection directe de variable dans la requête au lieu d'une reqûete préparée (= gros risque de sécurité)
    - hashage du mot de passe plutôt que password_verify

    Tout cela est obselète et dangereux.

    Quand à ton problème, les variables d'authentification $_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PW'] ne sont présentes que si PHP utilise le handler mod_php.

    Mets ceci en premier dans ton script:

    Et regarde la ligne Server API de la page qui s'affiche. Si elle ne dit pas "Apache 2.0 Handler", ces variables seront absentes. Dans ce cas, il faudra changer le handler à mod_php.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Je confirme qu'il vaut mieux changer de livre et en prendre un plus moderne enseignant PHP 7.0 au moins.
    Php 7 au moins... je n'irais pas jusque là parce que cela pourrait priver de sources intéressantes qui n'ont pas été mises à jour depuis. Je serais un peu plus souple en rejoignant l'avis de jreaux62 : tous les exemples utilisant mysqli ne sont pas à conseiller pour les débutants, car le standard actuel est PDO.

    Après sur le principe, faire des authentifications avec $_SERVER['PHP_AUTH_USER']... faut vraiment avoir des besoins minimalistes. Pourquoi ne pas faire une authentification classique et plus évolutive en utilisant des variables de sessions ? C'est un exercice standard qui pourrait resservir dans beaucoup de contextes contrairement à ce genre d'authentification dont les possibilités sont très limitées. Si cela t'intéresse d'avoir une authentification standard plus puissante et universelle basée sur les variables de session, rentre les termes "inscription connexion espace membre php" dans un moteur de recherche pour avoir de bons tutos.

    Dans tous les cas, je suis d'accord avec Tsilefy et jreaux62 : c'est le moment de changer de ressources et ne t'embarques pas dans mysqli. Même si dans l'absolu cette extension supporte également les requêtes préparées, ce qui donne un niveau de sécurité équivalent à l'extension PDO, elle est beaucoup plus lourde à utiliser que PDO et aussi beaucoup moins pratique (ne supporte pas les tableaux dans la fonction "execute" par exemple). En fait elle a été conçue pour mettre à jour facilement, de part ses similitudes avec mysql, d'anciens sites conçus avec mysql. Mais pour les nouveaux développements/projets, et donc pour les nouveaux développeurs, il faut utiliser l'extension PDO, d'autant plus que tous les exemples un peu récents (moins de 3-4 ans) que tu trouveras sur le web sont donnés avec PDO.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    vous venez de casser de grande illusions... Je trouvais ce livre pédagogique et j'arrivais à le suivre, pas facilement mais j'y arrivais.
    Bon ben en route pour PDO maintenant... Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Recherche script d'authentification MsSQL en PHP
    Par dodik dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/02/2006, 10h56
  2. Question sur les script sh
    Par gandalfar dans le forum Linux
    Réponses: 6
    Dernier message: 26/12/2005, 19h14
  3. Besoin d'aide sur un script SQL de recherche
    Par agougeon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2005, 12h40
  4. Question sur un script
    Par Gnux dans le forum Linux
    Réponses: 8
    Dernier message: 07/07/2005, 18h03
  5. installation sur serveur + script
    Par liliprog dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/08/2004, 16h18

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