Protection de mon interface admin

foxprox
Messages postés
16
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
6 août 2009
- 24 avril 2009 à 08:21
kohntark
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
- 25 avril 2009 à 13:02

9 réponses

foxprox
Messages postés
16
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
6 août 2009

24 avril 2009 à 08:26
oula petit problème...mon texte n'a pas été pris en compte!

Bonjour, je suis à la recherche d'un tuto ou de bonne explication sur les manières les plus récentes qu'on utilise pour protéger l'entrée de son interface admin.

J'utilise actuellement un système qu'on m'a appris pendant ma petite formation php de 3mois... Mais à l'apparence ce système est dépassé et n'est pas assez fort.[voir si dessous le code que j'utilise.]
La sécurité n'a pas été un sujet de premier plan lors de cette formation, j'ai donc de grosse lacune dans ce domaine et je cherche à réapprendre de bonne base. smile

merci d'avance pour votre aide et bonne journée ravi .
<?

$_POST["admin_login"] = mysql_real_escape_string($_POST["admin_login"]);

$_POST["admin_pwd"] = mysql_real_escape_string($_POST["admin_pwd"]);



$requete_verif = "SELECT admin_login,admin_pwd FROM t_admins WHERE admin_login='".$_POST["admin_login"]."' AND admin_pwd ='".$_POST["admin_pwd"]."'";

$resultat_verif = mysql_query($requete_verif);

$nombre = mysql_num_rows($resultat_verif);



if ($nombre>0) {

//on cree la variable de session

$_SESSION["pseudo"]= $_POST["admin_login"];
// On va rediriger vers admin_news.php

header("Location:admin_index.php");

}

else {

// On affiche un message d'erreur

$error=0;

}
}
?>
0
TychoBrahe
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
24 avril 2009 à 13:30
Salut,

Une première petite remarque sans grand rapport direct avec la sécurité, ce n'est a mon goût pas vraiment une bonne idée de modifier directement $_POST. Tu peux tout simplement virer tes deux premières lignes et utiliser mysql_real_escape_string() lors de la création de la requête SQL :
$requete_verif = "SELECT admin_login, admin_pwd FROM t_admins WHERE
admin_login='" . mysql_real_escape_string($_POST["admin_login"]) . "' AND admin_pwd
='" . mysql_real_escape_string($_POST["admin_pwd"]) . "'";

De même, concernant ce morceau de code :

$nombre = mysql_num_rows($resultat_verif);


if ($nombre>0)

Pourquoi ne pas avoir tout simplement fait ceci ?

if (mysql_num_rows($resultat_verif) > 0)

Sinon, pense a toujours vérifier si ta requête a réussie ou
échouée et gère la potentielle erreur le cas échéant. Au passage, c'est
inutile de sélectionner admin_pwd si tu ne t'en sert pas ;)

Ensuite, une remarque plus importante : pour utiliser ce procédé je devine que les mots de passes sont stockés en clair dans la base de donnée. Si c'est en effet le cas, c'est une très mauvaise chose : si quelqu'un arrive a dumper ta bdd il a directement les accès admin. Le mieux est de les hasher avant de les insérer. Au sujet de l'algorythme de hash, md5 et sha1 sont assez populaires et pas trop mauvais, mais ils commencent a montrer des faiblesses. Personnellement je préfère utiliser du sha256, ça évite pas mal d'attaques par rainbow tables si quelqu'un arrive a dumper ta base de donnée (regarde donc les différents sites de cassage de hash sur internet, presques tous concernent uniquement md5 et sha1). En plus si tu hash le pass tu n'as même plus besoin de faire un mysql_real_escape_string() dessus ;)
$requete_verif = "SELECT admin_login FROM t_admins WHERE
admin_login='" . mysql_real_escape_string($_POST['admin_login']) . "' AND admin_pwd
='" . hash('sha256', $_POST['admin_pwd']) . "'";
0
kohntark
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
24 avril 2009 à 20:44
Salut,

Juste un petit ajout :
if (mysql_num_rows($resultat_verif) > 0)
=>
if (mysql_num_rows($resultat_verif) == 1)

Ce n'est pas un problème de sécurité en soit, mais ça peut permettre de limiter et identifier d'autres pbs / failles.
En somme il ne doit y avoir qu'un seul couple pseudo / pass, si ce n'est pas le cas c'est qu'il y a un souci.

Concernant les hash, sans dire que je ne suis pas d'accord, c'est à mon avis pousser un peu loin que de ne pas faire confiance à md5.
Je vois trop souvent des personnes qui tiennent ce discours (je ne parle évidemment pas de toi TychoBrahe ) et qui laissent des gouffres de sécurité dans leurs codes ... une porte blindée de 1 mètre d'épaisseur avec des fenêtres de 2 mm, quitte à choisir je préfère opter pour du 10 cm avec du verre de 200.

Pour ce qui est des rainbow tables il me semble que c'est très simple de s'en prémunir (chui pas un pro du crypage) :
md5('biduletrucaupif'.$pass)

Bref, md5 ou sha256, et en tenant compte des remarques de TychoBrahe, ton script me semble bien sécurisé.

Cordialement,

Kohntark -
0
kohntark
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
24 avril 2009 à 20:48
Arf, j'avais cru que TychoBrahe l'avais dit, mais non :

header("Location:admin_index.php");

=>
header("Location:admin_index.php");
exit;

Sans cet exit ça peut poser, dans certaines circonstances, des problèmes de sécurité

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TychoBrahe
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
25 avril 2009 à 02:37
Salut,

«c'est à mon avis pousser un peu loin que de ne pas faire confiance à md5.»
Il suffit d'avoir un pass un peu trop faible pour que la hash soit complètement inneficace. Sinon en effet, ta méthode d'ajouter un sel est une bonne chose afin d'éviter ceci, d'ailleur c'est ce que fait la fonction php crypt(), a la seule différence que le sel est aléatoire. Au passage, si on utilise l'ajout d'un sel il faut bien entendu veiller a ce qu'il soit assez fort, ce serais bête qu'il se fasse lui même casser.

«Arf, j'avais cru que TychoBrahe l'avais dit, mais non»
Je n'utilise jamais header() pour effectuer uen redirection, je ne savais même pas que ne pas metrte de exit() après pouvais poser des problèmes ^^
0
foxprox
Messages postés
16
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
6 août 2009

25 avril 2009 à 11:20
merci beaucoup pour vous réponse, je vais regarder à attentivement et corriger mes erreurs!

ps: je suis toujours à la recherche de liens concernant  la protection des admins et des pages en général!

bon wE à tous
0
kohntark
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
25 avril 2009 à 11:49
Tu peux aussi voir du côté de htaccess, ssl.
Ca n'a été qu'abordé, mais le choix du mot de passe est primordial. C'est souvent une bonne chose de fixer des contraintes à ce niveau (min 8 char alphanumériques + ponctuation par exemple)
Tu peux également limiter le nombre de tentatives de connexions et bloquer un compte en cas d'échecs successifs, avec le mail qui va bien, le sms, la transmission de pensée ....
si je dévie ainsi c'est pour rappeler que la sécurité c'est primordial mais qu'il est stupide d'en faire trop. Ca coûte de l'argent (certif ssl, ...), des ressources serveur, et c'est source de bugs et d'incompatibilités, etc ... etc ...

Bref, il faut adapter la sécurité au contenu à protéger.

Kohntark -
0
foxprox
Messages postés
16
Date d'inscription
mercredi 11 mars 2009
Statut
Membre
Dernière intervention
6 août 2009

25 avril 2009 à 12:23
il faut adapter la sécurité au contenu à protéger, oui en effet,
En fait je développe un petit site pour un groupe de personnes (des amis à moi ) qui lutte contre l'extrême droite aux Pays-bas.
Le problème c'est qu'ils se sont fait hacker pour leur dernier site et que moi je ne suis vraiment pas expert sécurité comme vous avez pu le constater ^^ lol

Donc il faut vraiment que j'essaye de faire un truc qui tient un peu la route histoire que le site ne se fasse pas tuer en 1min :s

Eux, ils sont devenu complètement parano sur le sujet donc en résumé faut que j'étudie bien la question ^^
0
kohntark
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
25 avril 2009 à 13:02
Ca se comprends, n'hésite pas à reposter si nécessaire, on t'aidera si possible.

Bonne journée,

Kohntark -
0