Page protegée par un mot de pass

Bonjour,
j'aimerais savoir si ce code est vraiment sécurisé lorsqu'on l'utilise sur le net
en plus j'aimerais aussi savoir comment le faire sur une page
merci.


<!DOCTYPE html>
	<html>
	<head>
	<meta charset="utf-8" />
	<title>Page index.php</title>
	</head>
		<body>
			<p>Veuillez entrer le mot de passe pour obtenir les codes
			d'accès au serveur central de la NASA :</p>
			<form action="secret.php" method="post">
			<p>
			<input type="password" name="mot_de_passe" />
			<input type="submit" value="Valider" />
			</p>
			</form>
			<p>Cette page est réservée au personnel de la NASA. Si vous
			ne travaillez pas à la NASA, inutile d'insister vous ne trouverez
			jamais le mot de passe ! ;-)</p>
	</body>
</html>



---------------------------------------------------------------------------


<!DOCTYPE html>
<html>
	<head>
	<meta charset="utf-8" />
	<title>page secret.php</title>
	</head>
		<body>
			<?php
			if (isset($_POST['mot_de_passe']) AND $_POST['mot_de_passe'] ==
			"kangourou") // Si le mot de passe est bon
			{
			// On affiche les codes
			?>
			<h1>Voici les codes d'accès :</h1>
			<p><strong>CRD5-GTFT-CK65-JOPM-V29N-24G1-HH28-
			LLFV</strong></p>
			<p>
			Cette page est réservée au personnel de la NASA. N'oubliez
			pas de la visiter régulièrement car les codes d'accès sont changés
			toutes les semaines.<br />
			La NASA vous remercie de votre visite.
			</p>
			<?php
			}
			else // Sinon, on affiche un message d'erreur
			{
			echo '<p>Mot de passe incorrect</p>';
			}
			?>
		</body>
</html>


6 réponses

  1. Modérateur
    Bonjoour à tous;

    @jeepee : Le MD5 est fortement déconseillé .. idem pour le SHA1 qui sont facilement contournables désormais.
    A la place, on utilisera les fonctions php : password_hash et password_verify

    @jeepee, @yg_be : Les accolades pour un IF sont utiles lorsqu'il y a plusieurs instructions à réaliser lorsque la condition se vérifie.
    Par exemple
    if(condition){
      echo "un truc";
      echo "un autre truc";
    }
    

    Mais, si une seule action elles ne sont pas requises
      if(condition) 
       echo "truc machin";
    

    Mais pour éviter toute erreur... je conseille fortement de toujours utiliser les accolades.

    @jjkd , si, comme tu le dis, les mots de passe sont changés régulièrement, dans ce cas, utilise une base de données... plutôt que de modifier le code source de la page à chaque fois que tu auras besoin de changer les identifiants
    De plus, il serait bien d'utiliser un couple login/password plutôt que juste un password.
    Sinon, des petits malins pourraient s'amuser à essayer de forcer l'accès à ta page en utilisant des scripts de "force brute" pour cracker le password.

    Et pour finir, vu que tu débutes dans le monde php, voici quelques conseils à appliquer à tes codes :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    .
    1
    1. Merçi à tous vos interventions m'ont vraiment éclairés sur plusieurs points .
      Bon dimanche !
      0
    2. Contributeur
      @jjkdpeux-tu alors marquer la discussion comme résolue?
      0
  2. Modérateur
    Bonjour,

    Je ne suis pas particulièrement pointu en sécurité, mais tu pourrais a minima remplacer 'kangourou' par sa valeur md5 (2e55b55e3580b47e5155a8374a833a74) pour ne pas le mettre en clair dans le source.
    Après tu testes md5($_POST['mot_de_passe']) == "2e55b55e3580b47e5155a8374a833a74"

    voir d’autres possibilités : https://apprendre-php.com/tutoriels/tutoriel-35-scuriser-les-mots-de-passe-avec-les-hashs-et-les-salts.html

    Pour une saisie du formulaire et son contrôle tout en un, la logique ce serait en début du source de tester si 'mot_de_passe' est renseigné, si oui : contrôle, si non : affichage formulaire qui s’ auto relance.

    0
    1. Merci je teste pour voir
      0
      1. Contributeur
        bonjour,
        je ne sans pas ce que tu veux dire par "sécurisé". en tous cas, les visiteurs n'ont aucun moyen de voir ta source php.
        0
        1. ok merci
          dans mes recherches je suis tombe sur une vidéos dont j'ai essaye de reproduire le code mais sa ne marche pas lorsque je charge la page je vois:

          ( ! ) Parse error: syntax error, unexpected 'echo' (T_ECHO) in C:\wamp64\www\Tuto\page mdp\index.php on line 22

          pouvez vous m'aider à corriger s'il vous plait

          
          <?php 
          	$motdepasse = 'supraphoenix';
          	// on teste si le formulaire a été bien envoyé
          		if(isset($_POST['envoi'])) {
          	// on verifie que la case mot de passe est valide et non vide
          		if(isset($_POST['mdp']) AND !empty($_POST['mdp'])) {
              // on vérifie que le mot de passe entrée par l'utilisateur est le meme que celui que vous avez défini
          		if($_POST['mdp'] == $motdepasse) {
          			$accessgranted = 1;
          		}
          		  else  
          		{
          			$erreur = 'Attention le mot de passe entrée est erroné';
          		}
          	}	
          		if(!isset($accessgranted)) { ?>
          			
          			<h1>PAGE PROTEGE PAR UN MOT DE PASSE</h1>
          			<hr>
          <?php 
          	
          	if (isset($erreur)) ( echo $erreur; ) 
           ?>	
          
          <form action="" method="post">
          	Veuillez entrer le mot de passe : <br>
          	mot de passe <input type="password" name="mdp">
          	<input type="submit" name="envoi" value="entrez">
          </form>
          
          <?php  	} else
          // debut de la page sécurisée 
          ?>
          
          <h1>PAGE PROTEGE PAR UN MOT DE PASSE</h1>
          
          <?php
          }
          ?>
          
          
          0
          1. Contributeur
            je pense que tu peux remplacer les deux dernières parenthèses en ligne 23.
            0
          2. @yg_beje ne te suis pas du tout peux tu etre explicit pour moi ? svp
            0
          3. Modérateur
            @jjkdun bloc d'instruction dépendant du if n'est pas encadré par ( ) mais par .... ;-) tu as plein d'autres exemples dans le source
            0
          4. Contributeur
            @jjkdtu peux aussi les supprimer, si tu préfères.
            0
        2. je ne comprends toujours pas
          0
          1. Modérateur
            if (isset($erreur)) { echo $erreur; }


            @yg_be
            if (isset($erreur))  echo $erreur;
            fonctionne aussi ?

            mais ce code n'est pas terrible, pas lisible sans indentation correcte et on peut penser que lignes 19 et 36 c'est pareil, que
             if(!isset($accessgranted))
            le test devrait être l'inverse ...
            0
          2. Contributeur
            @jee peeles accolades permettent de regrouper plusieurs instructions, on peut les utiliser pour 0 ou 1 instruction.
            le
            if
            n'exige pas d'accolage.
            0