Vos commentaires sur ce code

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Vos commentaires sur ce code

Re: Vos commentaires sur ce code

par stealth35 » 17 févr. 2010, 17:37

sinon evite les alias aussi, a la place de "die" utilise "exit" :wink:

Re: Vos commentaires sur ce code

par Cerbere1980 » 17 févr. 2010, 16:31

Mon fichier connexion est assez classique :
<?php

function ouvreConnexion ()
{
	//Information de connexion	
	define('USERNAME','dbuser');
	define('PW','password');
	define('DSN','mysql:host=dbhost;dbname=dbname');
			
			
	try {
		$conn = new PDO(DSN,USERNAME,PW);
	} catch (PDOException $e) {
		print "Erreur !: " . $e->getMessage() . "<br/>";
		die();
	}
	//Retourne la connexion active
	return $conn;
}

function fermeConnexion ($conn)
{
	// Fermeture de la connexion à MSSQL
	$conn=NULL;
}

?>

Re: Vos commentaires sur ce code

par stealth35 » 17 févr. 2010, 15:17

hello,
1 :ta pas besoin de faire ton " //Traitement contre injection " puisque tu fais des requête préparer (donc ligne a surpimer)
2 : tu peu comparer directement que ton utilisateur existe puisque sous mysql ta une fonction SHA1
3 : pas trop besoin de fermer la connexion elle se ferme a la fin du script
4 : y'a surment du blabla a virer


ducoup montre ton fichier 'connexion.php'


ps : pour ta requete (en gros) :
SELECT IDAgence,Nom,Langue FROM Agence WHERE Mail= :login AND password = SHA1(sal + SHA1(:password))

Vos commentaires sur ce code

par Cerbere1980 » 17 févr. 2010, 15:09

Bonne rencontre,

Je débute en PHP et je désire faire les choses dans les règles de l'art. On progesse dans un langage en regardant la documentation, les sources des autres et en ossant exposer son propre code pour qu'il soit critiquer.

J'attends donc un retour de votre part me disant tu aurais du faire comme ça ou il faut surtout pas faire ça. L'objectif ici est une page de login qui je l'espère est protégé par des attaques de type injection.

J'utilise une connexion en PDO.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="description" content="Page de Login." />
<link href="style/stylesauth.css" media="all" rel="stylesheet" type="text/css" />
<title>Login</title>
</head>
<body>
<div id="authentification">
<?php

$check=false;

	if(!empty($_POST['envoyer']))
		
		{
			
			// Evalué à faux si $_POST['login'] est vide
			if (!empty($_POST['login'])) {

  					// Evalué à faux si $_POST['password'] est vide
					if (!empty($_POST['password'])) {
						
						$login= $_POST['login'];
						$password = $_POST['password'];
						
						//Traitement contre injection					
						$login= str_replace("'"," ",$login);
						$password= str_replace("'"," ",$password);
						
						//On ouvre la connexion
						include_once('connexion/connect.inc.php');
						$conn = ouvreConnexion();

						try{ 
							$stmt = $conn->prepare('SELECT Sel,Password FROM Agence WHERE Mail= :login');
							$stmt->execute(array(':login'=> $login));
	 					  }
    					catch(PDOException $e){
            			 print "Erreur !: " . $e->getMessage() . "<br/>";
            			 die();
      					 } 
      					 
      					 while($row = $stmt->fetch(PDO::FETCH_BOTH)){
       							 $sal = $row[0];
       							 $passwordDb = $row[1];
      					 }
      					 
      					 print $sal . "\t";
      					 print $password. "\t";      					 
      					 print $passwordDb . "\t";  
      					 
      					 //On crée une chaine SHA pour la comparé à la DB      					 
						$secure_password = sha1($sal . sha1($password));
						print $secure_password . "\t";

						if ($secure_password === $passwordDb)
						{
							//traitement récupere les données et on les stock dans une session
							try{ 
								$stmt = $conn->prepare('SELECT IDAgence,Nom,Langue FROM Agence WHERE Mail= :login');
								$stmt->execute(array(':login'=> $login));
		 					  }
	    					catch(PDOException $e){
	            				print "Erreur !: " . $e->getMessage() . "<br/>";
	            				 die();
	      					 } 
	      					 
	      					 while($row = $stmt->fetch(PDO::FETCH_BOTH)){
	       							 session_start();
	       							 $_SESSION['user_id'] = $row[0];
	       							 $_SESSION['user_nom'] = $row[1];
	       							 $_SESSION['user_langue'] = $row[2];
	       							 $check=TRUE;
	      					 }
	      					 
	      					 //Traitement on met a jour un champ
	      					 try{ 
								$stmt = $conn->prepare('UPDATE Agence SET DateDerniereConnexion=now() WHERE Mail= :login');
								$stmt->execute(array(':login'=> $login));
		 					  }
	    					catch(PDOException $e){
	            				print "Erreur !: " . $e->getMessage() . "<br/>";
	            				 die();
	      					 } 
	      					 
						}
						else
						{
							echo 'Error : The password does not match !';
						}

						// On ferme la connexion
						fermeConnexion($conn);
						
					}else  {echo 'Error : Please insert password !'; }
				
			}else  {echo 'Error : Please insert login !'; }		

				
		}
		

if($check === false)
		{
		?>
				<img class="imgLogo"/>
					<br /><br />
				<form method="post" action="index.php">
					<label for="login" class="mesLabel">Username</label>
					<input type="text" name="login" id="login"/>
					<br /><br />
					<label for="password" class="mesLabel">Password</label>
					<input type="password" name="password" id="password"/>
					<br /><br />
					<input type="submit" value="Send" name="envoyer" class="boutonAuth"/>
				</form>
			</div>
	   <?php	
		}
else
{
	//On effectue la redirection vers la partie sécurisée.
	//header('Location: /myserver/service/container.php');
}
		?>
</body>
</html>
D'avance, merci pour votre retour.

Cerbere.