Codes login

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 : Codes login

Re: Codes login

par Max2000 » 28 nov. 2014, 12:42

J'ai effectivement lu ceci:
http://php.net/manual/fr/pdostatement.r ... ample-1026
Mais je n'ai pas tout compris.Et comme il est nécessaire de bien tout comprendre pour mener à bien une tâche particulière, j'ai dû abandonner cette solution qui consiste à compter ce qui est sélectionné.
Car compter ça va.Mais c'est le traitement du comptage au final qui est le plus difficile.
Par contre j'ai trouvé une autre solution qui consiste à établir une comparaison des pseudos et des mots de passe en utilisant une boucle while pour autoriser l'accès à un espace membre.
Cela fonctionne. Bien que sans doute plus compliqué que ta solution.
Cependant j'aimerai bien suivre ton conseil concernant la sécurité sur les injections.Mais lorsque je présente ce code:
$req = $bdd->query ("SELECT * FROM users WHERE username='$pseudo' AND password='$password'". $bdd->quote($_POST['pseudo']) . " AND password=" . $bdd->quote($_POST['pseudo']));
Le message suivant apparait:
Nom d'utilisateur ou mot de passe incorrect
Peux tu m'en donner la raison?
Merci
<?php

session_start();

if(isset($_POST['submit']))
{
	$pseudo = htmlspecialchars(trim($_POST['pseudo']));
	$password = htmlspecialchars(trim($_POST['password']));
	
	if(empty($pseudo))
		{
		echo"Veuillez saisir votre pseudo<br/>";	
		}else if(empty($password))
			{
			echo"Veuillez saisir votre mot de passe";
			}else 
			
				
				try
				{
				$bdd = new PDO('mysql:host=localhost;dbname=phpmembre', 'root', '');
				}	
					catch (Exception $e)
					{
					die('Erreur : ' . $e->getMessage());
					}
					$password = md5($password);
						 	
					$req = $bdd->query ("SELECT * FROM users WHERE username='$pseudo' AND password='$password'");
					
					while($row = $req->fetch()) 
					  
					{  
					 if ($row['username']==$pseudo);						 
						{
						 if ($row['password']==$password);							    
							{
							$_SESSION['pseudo'] = $pseudo;						
							header('Location:membre.php');
							} 																 
						}
					}echo "Nom d'utilisateur ou mot de passe incorrect";	
					
  $req->closeCursor();    
									
}	
?>

<h1>Connexion</h1>
<form method="post" action=""> 

<p>Votre pseudo</p>
<input type="text" name="pseudo" /><br/>

<p>Votre mot de passe</p>
<input type="password" name="password" /><br/><br/>

<input type="submit" name="submit" value="Se connecter" />
</form>

<a href="register.php">Pas encore membre</a>

Re: Codes login

par ynx » 25 nov. 2014, 17:19

Salut,

La doc est ton ami :) http://php.net/manual/fr/pdostatement.rowcount.php
-> retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE

La solution classique pour compter le nombre de résultat est d'utiliser une requête SELECT count(*), cf exemple 2 : http://php.net/manual/fr/pdostatement.r ... ample-1026

En complément, htmlspecialchars doit être utilisé lors de l'affichage dans un document html (faille xss) et pas lors de l'utilisation des données avec une bdd. Pour éviter les injections sql, on utilise avec PDO soit les requêtes préparées, soit la méthode quote(). Par exemple en utilisant la méthode quote() avec ton code :
$login = $bdd->query("SELECT count(*) FROM users WHERE username=" . $bdd->quote($_POST['pseudo']) . " AND password=" . $bdd->quote($_POST['pseudo']));
Bonne journée

Codes login

par Max2000 » 25 nov. 2014, 16:42

Bonjour.

Dans un soucis de mise à jour de mes codes pour passer au PDO (Php Data Object), je voudrais savoir si ceux ci sont conforment au bon fonctionnement de ce fichier servant à loguer un utilisateur?
Notamment cette ligne que voici:
if ($login->rowCount() > 0)
Merci d'avance.
:)
<?php

session_start();

if(isset($_POST['submit']))
{


	$pseudo = htmlspecialchars(trim($_POST['pseudo']));
	$password = htmlspecialchars(trim($_POST['password']));
	
	if(empty($pseudo))
	{
		echo"Veuillez saisir votre pseudo<br/>";	
	}
	else if(empty($password))
	{
		echo"Veuillez saisir votre mot de passe";
	}
	else 
	{
	
	$bdd = new PDO('mysql:host=localhost;dbname=phpmembre', 'root', '');	
	
	$password = md5($password);
	$login = $bdd->query("SELECT * FROM users WHERE username='$pseudo' AND password='$password'");
	
	if ($login->rowCount() > 0) 
		
	{
		$_SESSION['pseudo'] = $pseudo;
		
		header('Location:membre.php');
	}
	else echo "Nom d'utilisateur ou mot de passe incorrect";
	}
}	
?>

<h1>Connexion</h1>
<form method="post" action=""> 

<p>Votre pseudo</p>
<input type="text" name="pseudo" /><br/>

<p>Votre mot de passe</p>
<input type="password" name="password" /><br/><br/>

<input type="submit" name="submit" value="Se connecter" />
</form>

<a href="register.php">Pas encore membre</a>