Authentification HTTP au moyen d'une base de données - PHP - Programmation
Marsh Posté le 26-02-2008 à 16:38:48
pas super propre le code que tu as trouvé...
sinon avec ton code les mots de passe doivent être crypté (avec la fonction mysql PASSWORD), et j'imagine que dans ta table utilisateurs ils ne le sont pas ?
Marsh Posté le 26-02-2008 à 16:46:37
en gros t'as une page d'accueil avec un login pass dans un form avec le nom de ta page où te loguer genre
Code :
|
bon tout ça, ça te donne la page de login, maintenant la page d'action serveur
Code :
|
En gros tu récupères une variable login et une variable pass tu les fais match via mysql si tu trouves un résultat c'est bon, sinon ça passe pas (normalement si ta BDD est bien faite, tu en trouves un et un seul).
Il est à noter que là c'est la base de chez la base, après il y a tout plein de procédures de sécurité, type md5, et anti injection sql etc etc à mettre en place...plus de la session etc etc....
Marsh Posté le 26-02-2008 à 16:59:39
merci beaucoup lordashram mais moi ma table où sont contenu les login et les mots de passe qui vont pouvoir s'authentifier s'appellent user, dans ma table, l'identifiant s'appelle idUSER et le mot de passe est mdp, peux-tu me dire je remplace quoi par quoi dans le script stp
Marsh Posté le 26-02-2008 à 17:01:14
lordashram a écrit :
|
' OR 1=1 --
Marsh Posté le 26-02-2008 à 17:18:12
j'ai fait ce fichier page_verif.php, je me connecte à ma BDD, j'ai remplacé nom_utilisateurs par idUSER et mot_de_passe par mdp pour que ça corresponde à ma table mais lorsque je tape mon login et mon mdp ça me met pas bon login pass alors que j'ai tapé les bons
Marsh Posté le 26-02-2008 à 17:24:14
bon en fait c'est bon j'arrive à avoir authentification OK c'est parce que dans ma BDD le mdp était codé en MD5, comment faire pour que le formulaire de connexion reconnaisse le MD5 ?
Marsh Posté le 26-02-2008 à 20:21:23
nop bien avant MySQL5. La version 5 est assez récent. C'est depuis MySQL4.XX, je crois depuis 4.3
Marsh Posté le 26-02-2008 à 20:40:29
weed a écrit : [b]nop bien avant MySQL5[b]. La version 5 est assez récent. C'est depuis MySQL4.XX, je crois depuis 4.3 |
4.1, sortie en avril 2003.
Et la v5 n'est pas si récente que ça, la version 5.0 est sortie en décembre 2003 Donc il n'y a que 8 mois entre les 2 ^^
Marsh Posté le 26-02-2008 à 21:22:17
Dj YeLL a écrit : |
Et bahh, je pensais pas que MySQL5 était si vieux que ca. Les entreprises sont tellement à la ramasse sur leur serveur ou sur 1 herbergeur PRO que j'ai l'impression que c'est tout recent la V5. Jusqu'a l'an dernier, je n'ai pas pu coder sur une V5 (maintenant, je suis sur Oracle). Elles sont moins hésitante de passer d'une 4.0 à une 4.1 alors que pour passer à une 5,les entreprises font la patte lourde ce qui amplifie l'impression que la V5 est tout nouveau par rapport à la 4.1
[HS]Pas mal du tout DjYeLL, le site de ta copine/femme. Ca interessera sûrement ma grand mère mais quand elle se décidera se mettre à l'info.
Merci pour le lien. Je bookmark pour plus tard.
[/HS]
Marsh Posté le 27-02-2008 à 14:24:21
dwogsi a écrit : En remplaçant PASSWORD par MD5 peut être? |
c dans mon formulaire ? je dois mettre <input type="MD5" name="pass" value="" /> non ?
Marsh Posté le 27-02-2008 à 14:30:14
boss183 a écrit : c dans mon formulaire ? je dois mettre <input type="MD5" name="pass" value="" /> non ? |
NON
Plutôt :
Code :
|
Marsh Posté le 27-02-2008 à 14:50:55
mais où dont que tu vois écrit PASSWORD ds mon fichier php j'ai pass à la rigueur ?!?!
Marsh Posté le 27-02-2008 à 14:51:18
dwogsi a écrit : J'AI DIS EN REMPLAÇANT PASSWORD PAR MD5, RIEN D'AUTRE!!!! |
Je vois franchement pas de quoi tu parles ...
Marsh Posté le 27-02-2008 à 14:54:11
dwogsi a écrit : J'AI DIS EN REMPLAÇANT PASSWORD PAR MD5, RIEN D'AUTRE!!!! |
Eh oh, sur un autre ton, on n'est pas au marché au poisson.... C'est facile pour toi du haut de ta connaissance de balancer des phrases comme ca "En remplaçant PASSWORD par MD5 peut être?"
Mais si la personne ne comprend pas, peut-être peux-tu l'aider un peu plus en le mettant sur la voie...
@boss183 : Ce que dit dwogsi (à raison d'ailleurs, même si la manière n'est pas là) c'est d'utiliser le SQL plutôt que le php pour faire le md5, donc cela donnerait :
Code :
|
NB : Par contre, il y a peut etre un pb de quote dans le SQL
Marsh Posté le 27-02-2008 à 14:57:08
Non mais je jouait la carte de la simplicité là...
En me basant sur le première version donnée de son code, à savoir celle contenant PASSWORD() dans la requête. Suffit tout simplement de remplacer PASSWORD par MD5 et c'est réglé.
Et donc si tu as repris le code qui t'as été donné (qui ne manque pas de trous de sécurité soit dit en passant) tu peux aussi écrire :
$rq.=" AND mot_de_passe=MD5('".$pass."')";
PS : C'est pas parce qu'on écrit une ligne en majuscules et qu'on colle quelques ! qu'on est forcément en train de "gueuler" hein je vous rappel que je post quand même pour aider...
Marsh Posté le 27-02-2008 à 15:00:09
Heureusement que j'avais noté ça à la fin de mon post :
Citation : Il est à noter que là c'est la base de chez la base, après il y atoutplein de procédures de sécurité, type md5, et anti injection sqletcetc à mettre en place...plus de la session etc etc.... |
J'avais donné juste la base et en gros la structure des tests après faut savoir d'adapter, on va pas lui tenir la #@%$ pour pisser non plus... mais bon il apprendra au fur et a mesure les règles de sécurité et d'éthique (le fameux md5 et l'anti injection sql).
Dj YeLL +1 [/b]pour l'utilisation des fonctions du SGBD (enfin bon mysql n'en est pas trop un, pas d'intégrité ref donc c'est moyen...enfin passons...).
Marsh Posté le 27-02-2008 à 15:07:12
En même temps j'ai cité les éléments qu'il fallait voir et dans la zone PHP il y a une topic spécial sur ça juste en dessous de celui où on est (pour le moment) donc s'il cherche un peu, il trouvera de quoi on parle. Faut s'y intéresser un minimum pour progresser.
Cela dit, il est vrai que c'est une faille très commune sur les sites de noobs et d'ailleur des sites pro aussi, je dénoncerais pas certains grands sites de moteurs de recherches spécialisés qui ne font pas de filtres à l'injection SQL ou certains sites d'asso dont le log souffre des problèmes précités et donc où se loguer en admin est un jeu d'enfant.
Mais s'il sait à peine faire un formulaire de log, je pense que le mieux est qu'il apprenne déjà le début de la comm client/serv sur ce qu'il est en train de faire, et ensuite il va fignoler la sécu...
Marsh Posté le 27-02-2008 à 15:18:04
merci à tous mais euh j'ai fait fait ce que vous avez dit :
$rq="SELECT idUSER FROM user";
$rq.=" WHERE idUSER='".$login."'";
$rq.=" AND mdp=MD5('".$pass."')";
et l'authentification ne marche pas pourtant mon mot de passe est bien codé en md5 aussi dans ma base
Marsh Posté le 27-02-2008 à 15:22:25
Et d'une : entoure de code de balise de code (par ex: [code = php] [/ code] (en enlevant tous les espaces)
et de deux je t'avais signalé un possible pb de quote dans la fonction MD5
=> essaye d'enlever les ' entre ".$pass." pour obtenir MD5(".$pass." )
Marsh Posté le 27-02-2008 à 15:53:31
lorsque j'en lève les quotes ça me met une erreur 2 lignes plus loin et je n'ai pas compris ce que tu veux dire par [code = php] ?!?!
je laisse mon code qi quelqu'un sait d'ou viens l'erreur :
Code :
|
Marsh Posté le 27-02-2008 à 16:05:33
Il veut dire :
[code = php]
// Ton code Php
echo 'Ton code Php';
function tonCodePhp($ton = 'code')
{
echo 'php';
}
[ /code]
=
Code : |
Marsh Posté le 27-02-2008 à 16:08:26
Quel est l'intérêt de faire ça ?
et puis je suis désolé mais je ne comprend pas bien comment mettre mon code là ?!?!
Marsh Posté le 27-02-2008 à 16:14:35
bah je veux bien mais n'empêche ça marche toujours pas vous croyez que ça peut marcher si j'utilise sha1 et puis quelles sont les différences avec md5 ?
Marsh Posté le 27-02-2008 à 16:15:36
Tu connais Google ?
Marsh Posté le 27-02-2008 à 16:26:03
Code :
|
Et là ca marche ?
Marsh Posté le 27-02-2008 à 16:38:54
babasss a écrit :
|
Le problème vient peut-être du nom du champ idUSER ne correspond pas au champ qui contient le login ?
Marsh Posté le 27-02-2008 à 16:39:46
merci babass mais quand j'ai remplacé par ton code voila ce qu'il me met :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\projet_homelive\page_verif.php on line 21
pas bon login pass
Marsh Posté le 27-02-2008 à 16:41:39
Un peu de lecture :
http://fr.php.net/mysql_error
+1
Marsh Posté le 26-02-2008 à 16:10:34
Bonjour à tous,
je souhaiterais protéger une page HTML grâce à l'authentification HTTP et en utilisant des noms d'utilisateurs et mot de passe déjà contenu dans ma base de données, j'ai trouvé un script pour ce que je souhaite faire, au début je me connecte à ma BDD (jusque là pas de problème) mais par la suite le script donne ça :
// Interroger la base de données
$rq = "SELECT prenom FROM utilisateurs
WHERE nom_utilisateurs='{$_SERVER['PHP_AUTH_USER']}'
AND mot_de_passe=PASSWORD('{$_SERVER['PHP_AUTH_PW']}'}";
$result = mysql_query ($rq);
$ligne = @mysql_fetch_array ($result);
if ($ligne)
{ // Si un enregistrement a été renvoyé
$auth = TRUE;
}
}
//Si on trouve rien:
if (!$auth)
{ header('WWW-Authenticate: Basic realm="homelive"');
header('HTTP/1.0 401 Unauthorized'); //Coup d'arrêt
}
?>
j'ai remplacé nom_utilisateur pas idUSER
et mot_de_passe par mdp
pour que ça corresponde à ma table (je ne sais si j'ai bien fait ça correctement)
lorsque je lance ma page HTML on me demande bien de m'authentifier mais l'authentification ne marche pas alors que je tape un idUSER et un mdp existant ds ma BDD.
De plus, j'ai entendu dire que l'on pouvait utiliser cette fonction que si PHP fonctionnait en module apache mais comment savoir si PHP est exécuté en qualité de module d'Apache et non en CGI.
Merci d'avance