Url Script

Résolu
RTIG -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Voilà ma question qui peut paraitre bête, voici un script ou je souhaite protéger une page web, cependant lorsque le mot de passe est correct ou es ce que j’insère le lien qui ouvrira la page qui est protégée.
Voici le script en question :
<?php
session_start(); 
if (isset($_SESSION['count']) && ($_SESSION['count'] > 4)) {
 header('Location: http://www.google.com/')
} else {
?> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Texte</title>
<style>
</style>
</head>
<body>
 <?php
 $password = 'motdepasse';
 if ((isset($_POST['password']) && ($_POST['password'])) != $password) {
  if (!isset($_SESSION['count'])) {
   $_SESSION['count'] = 0;
  } else {
   $_SESSION['count']++;
  }
 ?> 
<h1>Connexion</h1>
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<p><label for="password">Mot de passe</label> <input type="password" title="Saisissez le mot de passe" name="password" /></p> 
<p><input type="submit" name="submit" value="Connexion" /></p> 
</form>
 <?php
 } else { ?> 
<p>Voici le texte.</p>
<?php 
 }
} 
?>
</body>
</html>

EDIT : Ajout des balises de code (jordane)

Cordialement

Configuration: Windows / Firefox 84.0

15 réponses

Résumé de la discussion

Un script PHP visant à protéger une page par mot de passe présente des failles et des erreurs de logique dans la vérification et la redirection. Des conseils clés suggèrent d'activer l'affichage des erreurs, de démarrer la session dès le début et de normaliser les variables, puis de corriger la logique de vérification et d'utiliser une redirection suivie d'un exit. Enfin, il est utile de préciser que le fichier doit être nommé avec l'extension .php et que l'exécution du code nécessite un serveur configuré pour interpréter PHP.

Bobot (l'IA à votre service)
  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Avant tout, commence par lire ( et appliquer ) ceci :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    et, comme déjà dit par yg_be :
    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ensuite, voici à quoi devrait ressembler ton code
    <?php
    //démarrage des sessions ( à mettre au tout début de tes pages )
    session_start(); 
    
    //Affichage des erreurs PHP ( à placer avant le reste du code... sur toutes tes pages.. juste après le démarrage des sessions )
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    // définition des constantes/variables
     $password_a_trouver = 'motdepasse';
    
    //récupération PROPRE des variables AVANT de les utiliser
     $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
    $password = !empty($_POST['password']) ? $_POST['password']: NULL ; 
     
    if ($session_count > 4)) {
     header('Location: http://www.google.com/'); // tu avais oublié un point-virgule
     exit; // toujours mettre un exit après une redirection
    } 
    
    
    if ($password && $password != $password_a_trouver ) {
      $_SESSION['count'] = $session_count++ ;
    }else{
      //mot de passs est bon
      header('location :URL_de_ta_page_que_tu_veux.php');
      exit;
    }
    ?> 
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
        <title>Texte</title>
        <style>
        </style>
      </head>
      <body>
        <h1>Connexion</h1>
        <form name="form" method="post" action=""> 
          <p>
            <label for="password">Mot de passe</label> 
            <input type="password" title="Saisissez le mot de passe" name="password" />
          </p> 
          <p>
            <input type="submit" name="submit" value="Connexion" />
          </p> 
        </form>
      </body>
    </html>
    


    EDIT : Correction du script

    1
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Ah, et si tu veux vérifier sur ta page protégée (si elle est sur le même site...)
      il faut que tu modifies le code
      if ($password != $password) {
        $_SESSION['count'] = $session_count++ ;
      }else{
        //mot de passs est bon
        header('location :URL_de_ta_page_que_tu_veux.php');
        exit;
      }
      

      par
      if ($password != $password) {
        $_SESSION['count'] = $session_count++ ;
      }else{
        //mot de passs est bon
        $_SESSION['autorise'] = 1;
        header('location :URL_de_ta_page_que_tu_veux.php');
        exit;
      }
      


      et que sur la page "protégée" tu mettes au début de celle ci
      <?php
      //démarrage des sessions ( à mettre au tout début de tes pages )
      session_start(); 
      
      //Affichage des erreurs PHP ( à placer avant le reste du code... sur toutes tes pages.. juste après le démarrage des sessions )
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      // définition des constantes/variables
       $password = 'motdepasse';
      
      //récupération PROPRE des variables AVANT de les utiliser
       $autorise= !empty($_SESSION['autorise']) ? $_SESSION['autorise']: NULL;
      
      //on vérifie si l'utilisateur est bien connecté et autorisé
      if(!$autorise){
        // si pas autorisé ... retour à la page d'accueil
        header('location: index.php'); // ou autre page.. à toi de modifier
        exit;
      }
      
      ?>
      
      



      EDIT : Correction suite à la remarque d'yg_be
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        bonjour jordane,
        n'est-ce pas plutôt avant la ligne
        header('location :URL_de_ta_page_que_tu_veux.php');

        qu'il faut faire
        $_SESSION['autorise'] = 1;

        plutôt que dans le cas où on refuse de trop nombreuses tentatives de verification du mot de passe?
        0
      2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oui... quand j'ai collé je ne l'ai pas mis dans le bon bloc.
        Tu as raison
        if ($password != $password) {
          $_SESSION['count'] = $session_count++ ;
        }else{
          //mot de passs est bon
          $_SESSION['autorise'] = 1;
          header('location :URL_de_ta_page_que_tu_veux.php');
          exit;
        }
        
        0
  2. RTIG
     
    Je dois avoir loupé quelque chose j'ai bien suivi le script simplement quand j'heberge la page en question aprés modification? il s'affiche en haut de la page : 4)){ header('Location: http://www.google.com/')exit } if ($password != $password) { $_SESSION['count'] = $session_count++ ; }else{ $_SESSION['autorise'] = 1; header('location :http://www.unagiotage.com/UNAGIOTAGE/final.php) exit; } ?>

    Es ce que j'ai loupé quelque chose ?

    Merci pour le temps accordé.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Le fichier a bien l'extension .php ?
      Tu as bien mis le code PHP entre les balises php
      <?php
      //du code php
      
      ?>
      


      Et si tu ne trouves pas, il faudra :
      - Nous indiquer Le nom du fichier concerné
      - Nous montrer Le code COMPLET de ce fichier ( en utilisant les balises de code pour poster ton code )
      0
  3. RTIG
     
    Le fichier s'appel index.html
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Du code PHP ne peut se trouver que dans un fichier .php
      (à moins de faire un paramétrage sur le serveur autorisant l'exécution de code php dans d'autres types de fichiers ... et donc.. il faudrait que tu es la main sur la configuration du serveur en question )
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. RTIG
     
    <html>
    <head>
    <meta charset="UTF-8" />
    <title> UNAGIOTAGE </title>
    </head>
    <body>
    <?php
    session_start();

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    $password = 'motdepasse';

    $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
    $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;

    if ($session_count >4)){
    header('Location: http://www.google.com/')exit
    }

    if ($password != $password) {
    $_SESSION['count'] = $session_count++ ;
    }else{
    $_SESSION['autorise'] = 1;
    header('location :http://www.unagiotage.com/UNAGIOTAGE/final.php)
    exit;
    }
    ?>
    <!DOCTYPE html>
    <html>
    <HEAD>
    <TITLE>Police du texte</TITLE>

    <BODY>
    <P><FONT face="Comic Sans MS" color="#000000" size="20">
    <h1>Félicitations !</h1>

    Bienvenue dans cette première étape de réflexion
    Pour allez plus loin une recherche d’indices est nécessaire.
    </FONT/p>
    <br />
    <h1>Connexion</h1>
    <form name="form" method="post" action="">
    <p>
    <label for="password">Mot de passe</label>
    <input type="password" title="Saisissez le mot de passe" name="password" />
    </p>
    <p>
    <input type="submit" name="submit" value="Connexion" />
    </p>
    </form>
    </body>
    </html>
    <palign="center"><img src="http://www.unagiotage.com/images/billet.jpg"></p>
    0
  6. RTIG
     
    Donc si j'ai la main sa va etre bon ? En effet lorsque je nomme la page en index.php cela ne marche pas le domaine refuse de ce redirigé
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Je ne sais pas chez quel hébergeur tu es ... mais normalement index.php devrait fonctionner pareil qu'un index.html ( au niveau "redirection" )

      N'aurais tu pas mis un fichier .htaccess à la racine de ton site qui ferait des redirections ?


      Et puis sinon... tu peux toujours faire, dans ton index.html, une redirection automatique vers un index.php
      Soit en utilisant un fichier .htaccess ... soit en utilisant un javascript .. soit en utilisant une balise meta ...

      Et quand je dis avoir la main ... c'est bien sur la configuration apache/nginx du serveur ...
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      es-tu certain que le fichier index.php existe au bon endroit?
      0
  7. RTIG
     
    Oui l'hebergeur c'est IONOS. Aprés je viens de faire un petit script html qui redirige vers la page en question index.php mais j'obtiens un message erreur. Je vais les contacter pour voir pourquoi les pages php ne s'ouvre pas.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Ionos (anciennement 1&1) n'a aucun souci à avoir un fichier index.php a la place d'un index.html (mais faut bien supprimer ton index.html)

      Quand au message d'erreur... C'est quoi ?
      Peut-être une erreur dans le code tout simplement
      0
  8. RTIG
     
    Effectivement y avait un souci par rapport au domaine mais effectivement index.php possible
    desormais le message est :
    Parse error: syntax error, unexpected ')' in /homepages/31/d847674641/htdocs/UNAGIOTAGE/index.php on line 23
    <html>
    <head>
    <meta charset="UTF-8" />
    <title> UNAGIOTAGE </title>
    </head>
    <body>
    <?php
    session_start(); 
    
    
    
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    
    $password = 'motdepasse';
    
    
    $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
    $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;
     
    if ($session_count >4)){
    header('Location: http://www.google.com/')exit;
    } 
    
    
    if ($password != $password) {
        $_SESSION['count'] = $session_count++ ;
      }else{
        $_SESSION['autorise'] = 1;
        header('location :http://www.unagiotage.com/UNAGIOTAGE/final.php);
        exit;
      }
    ?> 
    <!DOCTYPE html>
    <html>
        <HEAD>
            <TITLE>Police du texte</TITLE>
         
        <BODY>
            <P><FONT face="Comic Sans MS" color="#000000" size="20">
    <h1>Félicitations !</h1>
    
    Bienvenue dans cette première étape de réflexion 
    Pour allez plus loin une recherche d’indices est nécessaire.
    </FONT/p>
    <br />
        <h1>Connexion</h1>
        <form name="form" method="post" action=""> 
          <p>
            <label for="password">Mot de passe</label> 
            <input type="password" title="Saisissez le mot de passe" name="password" />
          </p> 
          <p>
            <input type="submit" name="submit" value="Connexion" />
          </p> 
        </form>
      </body>
    </html>
    <palign="center"><img src="http://www.unagiotage.com/images/billet.jpg"></p>
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Voici ton code corrigé
      Pleins d'erreurs de balises HTML mal placées, non fermées ...
      Un oubli de quotes dans une ligne de code php
      Le code PHP mal positionné...

      bref
      <?php
      //TOUJOURS METTRE CETTE LIGNE AVANT TOUT LE RESTE .. Y COMPRIS LE HTMLL
      session_start(); 
      
      // Placer ensuite ces lignes
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      
      // ET là .. on commence le code PHP
      // de préférence.. avant le html ..
      
      $password = 'motdepasse';
      
      $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
      $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;
       
      if ($session_count >4){
        header('Location: http://www.google.com/');
         exit;
      } 
      
      
      if ($password != $password) {
          $_SESSION['count'] = $session_count++ ;
      }else{
        $_SESSION['autorise'] = 1;
        header('location: http://www.unagiotage.com/UNAGIOTAGE/final.php');
        exit;
      }
      ?> 
      <!DOCTYPE html>
      <html>
          <head>
            <title>Police du texte</title>
            <meta charset='utf-8'>
          </head> 
          <body>
            <p>
              <FONT face="Comic Sans MS" color="#000000" size="20">
              <h1>Félicitations !</h1>
              Bienvenue dans cette première étape de réflexion 
              Pour allez plus loin une recherche d’indices est nécessaire.
              </FONT>
              </p>
            <br />
            <h1>Connexion</h1>
            <form name="form" method="post" action=""> 
              <p>
                <label for="password">Mot de passe</label> 
                <input type="password" title="Saisissez le mot de passe" name="password" />
              </p> 
              <p>
                <input type="submit" name="submit" value="Connexion" />
              </p> 
            </form>
            <p align="center"><img src="http://www.unagiotage.com/images/billet.jpg"></p>
        </body>
      </html>
      
      


      Edit: correction ligne 19
      0
      1. RTIG > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci beaucoup pour le temps accordé par contre j'ai encore une erreur a la ligne 19 je ne comprends pas pourquoi ?
        0
      2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > RTIG
         
        Une parenthèse en trop.
        0
  9. RTIG
     
    Plus aucun message d'erreur par contre je n'ai plus la demande de mot de passe il redirige vers la bonne page directement.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      oh purée.. je n'étais pas bien réveillé quand je t'ai écrit le code
      donc, à corriger comme ceci
      $password_a_trouver = 'motdepasse'; // modification du nom de la variable
      
      $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
      $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;
       
      if ($session_count >4){
        header('Location: http://www.google.com/')exit;
      } 
      
      
      if ($password != $password_a_trouver) { // correction du if
          $_SESSION['count'] = $session_count++ ;
      }else{
        $_SESSION['autorise'] = 1;
        header('location: http://www.unagiotage.com/UNAGIOTAGE/final.php');
        exit;
      }
      
      0
  10. RTIG
     
    :) c'est pas grave c'est super sympas tu était pas obligé. Par contre plus aucun message d'erreur la page est revenu cependant j'ai saisie le mot de passe rien ne ce passe.
    0
  11. RTIG
     
    <?php
    
    session_start(); 
    
    
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    
    
    
    
    $password_a_trouver = 'argyrocratie';
    
    $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
    $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;
    
    print_r($_POST); if ($session_count >4){
      header('Location: http://www.google.fr');
       exit;
    } 
    
    
    if ($password != $password_a_trouver) { 
        $_SESSION['count'] = $session_count++ ;
    }else{
      $_SESSION['autorise'] = 1;
      header('location: http://www.unagiotage.com/UNAGIOTAGE/final.php');
      exit;
    }
    ?> 
    <!DOCTYPE html>
    <html>
        <head>
          <title>UNAGIOTAGE</title>
          <meta charset='utf-8'>
        </head> 
        <body>
          <p>
            <FONT face="Comic Sans MS" color="#000000" size="20">
            <h1>Félicitations !</h1>
            Bienvenue dans cette première étape de réflexion 
            Pour allez plus loin une recherche d’indices est nécessaire.
            </FONT>
            </p>
          <br />
          <h1>Connexion</h1>
          <form name="form" method="post" action=""> 
            <p>
              <label for="password">Mot de passe</label> 
              <input type="password" title="Saisissez le mot de passe" name="password" />
            </p> 
            <p>
              <input type="submit" name="submit" value="Connexion" />
            </p> 
          </form>
          <p align="center"><img src="http://www.unagiotage.com/images/billet.jpg"></p>
      </body>
    </html>
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Oui,
      Tu as modifié le code, c'est bien. ( tu aurais pu faire un retour à la ligne après le print_r ..

      Quoi qu'il en soit, c'est surtout le résultat SUR ta page, une fois que tu entres le mot de passe dans ton formulaire qui m'interresse...
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        j'ai l'impression que tu as des espaces qui s'ajoutent..
        On va les retirer grâce à un trim

        Nouveau code
        <?php
        session_start(); 
        
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
        
        
        $password_a_trouver = 'argyrocratie';
        
        $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
        $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;
        
        //var_dump($_POST);   // pour les tests si besoin.
        
        if ($session_count >4){
          header('Location: http://www.google.fr');
          exit;
        } 
        
        
        if ($password && trim($password) != trim($password_a_trouver)) { 
            $_SESSION['count'] = $session_count++ ;
        }else{
          $_SESSION['autorise'] = 1;
          header('location: http://www.unagiotage.com/UNAGIOTAGE/final.php');
          exit;
        }
        ?>
        


        Celui ci, je l'ai testé.. il fonctionne.
        0
      2. RTIG > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        J'ai testé effectivement suite à t'es conseil y avait une erreur a la ligne 22 une parenthèse de trop. Maintenant j'ai une erreur ligne 23.
        Parse error: syntax error, unexpected ';' in /homepages/31/d847674641/htdocs/UNAGIOTAGE/index.php on line 23
        0
  12. RTIG
     
    Voici le résultat sur la page
    Array ( [password] => [submit] => Connexion )
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Ah mais.. je n'avais pas fais gaffe...

      Il faut modifier la ligne
      $password = !empty($_SESSION['password']) ? $_SESSION['password']: NULL ;
      

      par
      $password = !empty($_POST['password']) ? $_POST['password']: NULL ;    
      
      0
  13. RTIG
     
    Donc on remplace la ligne 12 par celle que tu me dis mais il m'affiche toujours pareil.
    Parse error: syntax error, unexpected ';' in /homepages/31/d847674641/htdocs/UNAGIOTAGE/index.php on line 23
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Bon,
      cette fois j'ai pris le temps de tester le script

      <?php
      //Démarrage des sessions
      session_start(); 
      //affichage des erreurs PHP
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      
      // variable contenant le password à trouver
      $password_a_trouver = 'argyrocratie';
      
      //récupération PROPRE des variables AVANT de les utiliser
      $session_count = !empty($_SESSION['count']) ? $_SESSION['count']: 0;
      $password = !empty($_POST['password']) ? $_POST['password']: NULL ;
      
      //juste pour les tests.. tu pourras le retirer ensuite
      var_dump($_SESSION);
      
      //--------------------------------//
      //DEBUT DU SCRIPT
      //--------------------------------//
      if ($session_count >4){
        $_SESSION['autorise'] = 0;
        header('Location: http://www.google.fr');
        exit;
      } 
      
      
      if ($password && trim($password) != trim($password_a_trouver)) { 
        $_SESSION['count'] = $session_count++ ;
      }else if(trim($password) == trim($password_a_trouver)){
        $_SESSION['autorise'] = 1;
        header('location: http://www.unagiotage.com/UNAGIOTAGE/final.php');
        exit;
      }
      ?> 
      
      0
  14. RTIG
     
    Super ça fonctionne t'es un pro !!! Merci beaucoup du temps accordé.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Le pro ... il était fatigué quand il t'a donné les premières réponses... je n'aurais jamais du faire ces erreurs....
      Normalement en un ou deux messages max tu aurais du avoir un script fonctionnel...
      pfff... va falloir que je dorme un peu plus... :-)

      Bon dimanche.
      0