Bonjour,
Je voudrais sécuriser l'accès à un programme php, sur un serveur, qui génère des pages d'administration pour un utilisateur qui s'identifie via un formulaire html.
N'étant pas sûr des techniques qui permettent de contourner les sécurités, je poste ici un résumé du mécanisme d'identification que j'ai mis en place: merci de me dire si vous pensez à un moyen de contourner le truc. ça me permettra de me faire une meilleur idée de l'efficacité du procédé...
alors voilà:
coté serveur, les utilisateurs sont enregistrés dans une base de données, avec leur login et le md5 de leur mot de passe.
lorsqu'un client demande la page d'identification, une session php est ouverte et deux variables de session sont créées:
1] une variable "ip" initialisée avec $_SERVER["REMOTE_ADDR"]
2] une variable "id" initialisée avec un identifiant créé pour l'occasion ( avec md5(rand()) )
une fois ces variables de session créées, un formulaire est envoyé au client avec un champ texte de nom "login" et un champ password de nom "clef".
lorsque l'utilisateur valide le formulaire d'identification, un code javascript remplace, avant de poster, le champ password par:
md5(md5(password) + id)
où id est l'identifiant créé en 2]
donc dans la requete POST qui suit la validation du formulaire, y'a le login, en clair, et une clef qui vaut md5(md5(password) + id)
lorsque la requête arrive avec le login et la clef, php récupère dans la base le md5 (mettons dans $md5_pass) correspondant à ce login, et compare la clef à:
md5($md5_pass.$_SESSION["id"])
si le resultat de ce truc est pareil que la clef, alors le script considère que l'identification est OK.
dans ce cas, une variable de session de nom "user" est crée avec pour valeur le login posté.
dans le reste du programme, l'accès aux fonctions d'administration est autorisée si :
$_SESSION["user"] a une valeur ET $_SESSION["ip"] est égal à $_SERVER["REMOTE_ADDR"]
...
et voilà !
(je soupçonne un truc débile dans ce procédé, mais j'arrive pas à mettre le doigt dessus)