Authenfication

Eléphant du PHP | 206 Messages

05 déc. 2005, 17:21

Bonjour à tous,

J'ai ressorti un vieu bout de code... pour permettre l'authentification par login et mdp au back office de mon intranet. J'essai en vain de le faire fonctionner et un amis me dis qu'il n'est pas compatible avec php 4 et 5

voici le formulaire :
<html>
<head>
<link href="../stylesheet/global.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
<title>Authentification - Intranoo - Club 14</title><body>
<table border="1"width="600" align="center">
  <tr>
    <td><div align="center" class="texte_gras">Club 14- Administration - Identification</div></td>
  </tr>
</table>
<form action="authentification.php" method="post">
  <table width="80%" border="0" cellspacing="0" cellpadding="0" align="center">
    <tr>
      <td colspan="3"><div align="center"><br>
          <br>
          <span class="texte">Partie réservée à l’administration du site. <br>
          <br>
          Entrez votre identifiant et votre mot de passe pour y accéder.</span> </span><br>
          <br>
          <br>
        </div></td>
    </tr>
    <tr>
      <td width="32%">&nbsp;</td>
      <td width="16%" class="texte_gras">Login :</td>
      <td width="52%"><input type=text name=login size="20">
      </td>
    </tr>
    <tr>
      <td width="32%">&nbsp;</td>
      <td width="16%" class="texte_gras">Mot de passe :</td>
      <td width="52%"><INPUT TYPE=PASSWORD NAME=pass size="20">
      </td>
    </tr>
    <tr>
      <td colspan="3"><div align="center"> <br>
          <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE="Accéder au back office">
        </div></td>
    </tr>
  </table>
  <div align="center">
    <?php
if ($Message == "Invalide")
		{
		print ("<B><FONT COLOR=RED>Vous n'etes pas enregistré !</FONT></CENTER></B>\n");
		}
else if ($Message == "Invalide2")
		{
		print ("<B><FONT COLOR=RED>Votre pass n'est pas exact</FONT></CENTER></B>\n");
		}
else if ($Message == "Invalide3")
		{
		print ("<B><FONT COLOR=RED>Votre n'avez pas inscrit de login</FONT></CENTER></B>\n");
		}
		?>
  </div>
</FORM>
</body>
</html>
et le fichier authentification.php
<?php
include('connection.inc.php');

$query="SELECT count(*) FROM authentification where login='$login'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$total = $row[0];

	if($login==NULL)
			{
				header ("Location: index.php?Message=Invalide3");

			}



	else if($total != 1)
		{
			header ("Location: index.php?Message=Invalide");

		}

	else
		{
			$query="SELECT count(*) FROM authentification where pass='$pass'";
			$result = mysql_query($query);
			$row = mysql_fetch_row($result);
			$total = $row[0];

				if($total != 1)
				{
							header ("Location: index.php?Message=Invalide2");
				}


				else
				{
							header ("Location: back_office.php");
				}



		}
?>
merci d'avance si vous pouviez me dire si ce code est obsolète (je ne parle pas de sécurité en tant que tel mais d'efficaité)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 déc. 2005, 17:29

ton script est obsolète dans le sens où tu ne récupère pas tes variables issues des formulaires ou des sessions.

une directive du php.ini (register_global) permettait auparavent de récupérer $_POST["nom"] directement dans $nom

désormais, pour assurer une portabilité sur la majorité des serveurs, il fait utiliser $_POST ou $_GET pour récupérer des valeurs provennant d'un formulaire et il faut utiliser $_SESSION pour récupérer une variable de session
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 27 Messages

05 déc. 2005, 18:39

Et je ne voit pas de connexion mysql :o
Allez sur JournaWeb.info ! ! ! ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 déc. 2005, 10:49

Et je ne voit pas de connexion mysql :o
include('connection.inc.php');
;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
pjl
ViPHP | 2119 Messages

06 déc. 2005, 11:02

Tu ne parles pas de sécurité et pourtant...............
Il y a un énorme trou de sécurité dans ton script.

Eléphant du PHP | 206 Messages

06 déc. 2005, 12:51

Merci pour vos réponses, je vais chercher un tuto pour me faire une petite authentification qui va bien :)

++

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 déc. 2005, 12:58

Tu ne parles pas de sécurité et pourtant...............
Il y a un énorme trou de sécurité dans ton script.
C'est vrai que je n'ai pas regardé le script SQL :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
pjl
ViPHP | 2119 Messages

06 déc. 2005, 13:05

Merci pour vos réponses, je vais chercher un tuto pour me faire une petite authentification qui va bien :)

++
J'espère que tu as vu let compris le trou de sécurité de ton script avant.

Eléphant du PHP | 206 Messages

06 déc. 2005, 16:48

Apparemment il est possible en tapant l'url dans le navigateur de passer outre l'identification.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 déc. 2005, 17:03

pas seulement.

Vu que tu n'utilise pas $_POST, il suffit au visiteur de rajouter ?login=maval pour emuler l'autentification

deplus, si il lui passe l'idée de mettre la valeur encodée pour url de toto' AND 1=1, ta requete sera

Code : Tout sélectionner

SELECT count(*) FROM authentification where login='toto' AND 1=1
et retournera toujours au moins une ligne
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
pjl
ViPHP | 2119 Messages

06 déc. 2005, 18:20

Ca, c'est du classique mais il y a pire.

Avec ce script, on peut se loguer avec le login de x et le password de y.