Page 1 sur 1

Aide pour authentification sécurisée

Posté : 08 janv. 2008, 19:51
par VaN
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é ?

Posté : 08 janv. 2008, 20:14
par Hywan
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é.

Posté : 08 janv. 2008, 22:01
par AB
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