Aide pour authentification sécurisée

VaN
Mammouth du PHP | 1107 Messages

08 janv. 2008, 19:51

Bonjour,

Je pense avoir trouvé un moyen de créer un système de session sécurisé, qui n'accepte pas les injections SQL, et sans passer par mysql_real_escape_string() ou autre moyen de ce type, mais j'aimerai vos avis sur ce script, si il vous emble sécurisé ou non.
// si une demande d'authentification est faite
if(isset($_POST['auth'])) {
	$sql = 	"SELECT user_pass
			FROM users
			WHERE user_login = '".$_POST['login']."'";
	$query = mysql_query($sql) OR die('Error : '.mysql_error());
	$result = mysql_fetch_assoc($query);
	
	if($result['user_pass'] == md5($_POST['pass'])) {
		// on ouvre la session
		echo 'ok';
	}
}
Le principe de l'injection SQL est de faire rajouter une égalité parfaite dans la requete, lorsque la requete cherche une ligne ou coïncide un login et un password fourni dans un formulaire. Or, dans le script que je viens d'afficher, la requete ne cherche que le login dans la base de donnée, et c'est le PHP qui se charge de regarder si il y'a une égalité entre le mot de passe trouvé dans la base, et celui fourni par l'utilisateur. Je me laisse donc à penser que ce script est sécurisé contre les injections SQL. Qu'en pensez-vous ? Reste t'il d'autres moyens de hacker un formulaire de session, auxquels je n'aurai pas pensé ?

ViPHP
ViPHP | 4674 Messages

08 janv. 2008, 20:14

Au premier coup d'oeil, une chose me choque.
Tu utilises $_POST['login'] sans rien vérifier dessus.
Si je fais :
$_POST['login'] = "'; DROP DATABASE base;";
et on verra si ton script est toujours performant ;-). Je ne pourrais peut être pas me connecter, mais je pourrais toujours mettre un sacré bazar dans ta base.
Après, tout est une question de magic_quotes et de mysql_real_escape_string. Mais ton script nu n'est pas sécuritaire si c'est ce que tu voulais savoir.

Le fait de séparer le traitement SQL vers PHP ralenti aussi ton application. Ce n'est peut être pas judicieux. Il suffit de protéger correctement les données entrantes de ta requête SQL, et le traitement sera sécurisé.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

08 janv. 2008, 22:01

Heu... et pourquoi tu ne veux pas faire comme le recommande le manuel et ne pas utiliser mysql_real_escape_string() ? Histoire de te planter ?

Voilà typiquement une authentification http://www.phpfrance.com/forums/voir_re ... php#227768