MOT DE PASSE POUR SITE WEB EN PHP

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 14 avril 2007 à 01:36
solafsara Messages postés 3 Date d'inscription mardi 14 décembre 2010 Statut Membre Dernière intervention 21 mai 2012 - 21 mai 2012 à 12:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42239-mot-de-passe-pour-site-web-en-php

solafsara Messages postés 3 Date d'inscription mardi 14 décembre 2010 Statut Membre Dernière intervention 21 mai 2012
21 mai 2012 à 12:37
Voila mon code mais il affiche un message d'erreur: Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\www.dimanord.com\verification_mail.php on line 25
Probléme lors de l'envoi du mail


<?php

if(!empty($_POST['emailuser']))
$email = $_POST['emailuser'];
$c=mysql_connect("localhost","root","");
mysql_select_db("ecommercedim");
//else
//exit("Mail vide.");

$sql "SELECT emailuser FROM utilisateur WHERE emailuser '$email'";
$req = mysql_query($sql);

if(mysql_num_rows($req) != 1)
//exit("Mail inconnu.");
//else
//{
$row1 = mysql_fetch_assoc($req);
$retour mysql_query("SELECT mdp FROM utilisateur WHERE emailuser '$email'");
$row2 = mysql_fetch_assoc($retour);

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$objet = 'Récupération de votre mot de passe';

if(!mail($row1['emailuser'], $objet, $row2['mdp'], $headers))
echo 'Probléme lors de l\'envoi du mail';
else
echo 'Mail envoyé';
//}
mysql_close($c);
?>

Besoin d'aide SVP...
solafsara Messages postés 3 Date d'inscription mardi 14 décembre 2010 Statut Membre Dernière intervention 21 mai 2012
21 mai 2012 à 12:19
Urgeeeeent S.V.P: Salut, j'ai besoin d'une autentification qui contient juste le login et le mot de passe avec le boutton envoyer et un lien "Mot de passe oublié":
ce dernier permet à l'utilisateur si jamais il a oublié son mot de passe, un email va etre envoyer
à sa boite de reception qui va contiendra le correcte mot de passe. "php"


Et merci.
folla1987 Messages postés 28 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 18 juin 2011
14 avril 2011 à 22:24
il a pas de réponse sur ma question ??
tony88110 Messages postés 2 Date d'inscription dimanche 13 février 2011 Statut Membre Dernière intervention 14 avril 2011
14 avril 2011 à 16:33
j'aimerai crée un espace mot de passe oublier pourriez vous m'aidez
tony88110 Messages postés 2 Date d'inscription dimanche 13 février 2011 Statut Membre Dernière intervention 14 avril 2011
14 avril 2011 à 16:31
utilise md5
folla1987 Messages postés 28 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 18 juin 2011
8 avril 2011 à 12:08
pour securiser un mot de passe par le cryptage ..comment faire ?? Merci
samirmeridien Messages postés 1 Date d'inscription mardi 17 août 2010 Statut Membre Dernière intervention 19 août 2010
19 août 2010 à 13:36
je crois qu'il faut mettre dans la e haut de la page include("ta page de login")
morando007 Messages postés 3 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 9 février 2009
9 févr. 2009 à 15:49
Mr wouwou1!!
j'ai un probléme qui vous pouvez m'aider si il te plait!!
quant le mot de passe et le login sont incorrecte et je veux qu'il m'affiche que sur la meme page l'erreur du mot de passe et le login et la possibilité de le resaisir!!
merci d'avance
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
10 juil. 2007 à 10:51
@ piranhaworld... non je stock les deux car l'id est à usage unique... .. .

@ tchaOo°
piranhaworld Messages postés 10 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 9 juillet 2007
9 juil. 2007 à 22:16
Entierement d'accord avec FHX.. un test en PHP c'est pas pro.

@Kankrelune : Si tu as tellement besoin du passe utilise $_POST['passwd']; et stock ton fameux id (et non le passe)

@Teclis01 : Cette source est razmoket.. elle apporte rien (d'ou la note)
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
18 avril 2007 à 00:16
Pardonnez mon intrusion mais je viens d'arriver et euh je voudrais savoir ce que cette source apporte ? Les commentaires oui mais la source ...?
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 avril 2007 à 18:55
"et si je garde le hash chargé c'est parce qu'il me sert dans la création d'id..." Je suis pas sur d'avoir tout compris lol ;)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
16 avril 2007 à 18:41
Les mot de pass sont hashés avec sha1... et si je garde le hash chargé c'est parce qu'il me sert dans la création d'id... .. . ;o)

@ tchaOo°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 avril 2007 à 16:46
Hu ?
Le mot de passe ne doit servir que lors de la phase de login. Après, on considère que l'utilisateur est loggué ou non.
Si il est loggué, alors tu ne gardes que son identifiant unique au pire... ou alors toutes ses infos au mieux mais SANS son mot de passe (qui doit être hashé md5 voir sha1 ou mieux au minimum).

Je comprends pas pourquoi tu veux garder son mot de passe, il ne sert à rien une fois qu'il est loggué.
Ex :

1ère requète :
// Je passe volontairement les étapes.
SELECT id FROM users WHERE login $login AND passwd $passwd;

if ( $q->num_rows() === 1 ) {
$id = $q->fetch_row();
SELECT x,y,z,a,b,c,d FROM users WHERE id = (int) $id[0]
$_SESSION['user']['x'] = $data['x'];
$_SESSION['user']['y'] = $data['y'];
// ou alors
$user = new membre($data);
}


Et voila. Je n'ai plus besoin de son mot de passe :)
Je comprends pas pourquoi tout le monde s'obstine à vouloir récupérer et garder le mot de passe via PHP :s
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
16 avril 2007 à 16:24
Euuuuuh... le fait de tester le mot de pass en php ne veut pas dire que l'on révèlera au final lequel à mal été taper... là je te rejoins FhX c'est un mauvais point coté sécurité et pour moi la question ne se pose même pas... personnellement je teste mon pass via php tout simplement parce que je m'en ressers après, notamment en session, et que je n'ai pas envie (et ça serait idiot) de refaire une requête en BDD à chaque fois que j'en ai besoin... .. .

@ tchaOo°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 avril 2007 à 13:27
"C'est vrai que c'est un couple, mais normalement le login est la clef primaire ou une clef sans doublon, le mot de passe sert de sécurité.Quand on fait un enregistrement dans une table, pour savoir qui l'a effectué, on enregistre le login de l'utilisateur..."
Faux, on enregistre l'ID unique de l'utilisateur en tant que clef primaire. Le login et le mot de passe servent de sécurité pour cet identifiant justement.
La relation de cette table est rapide à écrire :

User ( id_user, login_user, passwd_user );
id_user: clé primaire

Le fait d'aimer si c'est le login ou le mot de passe qui est faux relève du confort pour l'utilisateur, certes... mais peut aussi permettre à un attaquant de savoir si le login est bon ou si il ne l'est pas.
A savoir si l'on aime une sécurité en plus ou pas... pour moi c'est vite choisi :)
cs_bluedemon Messages postés 41 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 3 novembre 2008
16 avril 2007 à 09:37
Pour moi, en tant que professionnel aussi et surtout internaute, j'aime savoir si c mon login ou mot de passe qui est bon ou pas, ça m'évite de chercher lequel n'est pas bon. C'est vrai que c'est un couple, mais normalement le login est la clef primaire ou une clef sans doublon, le mot de passe sert de sécurité. Quand on fait un enregistrement dans une table, pour savoir qui l'a effectué, on enregistre le login de l'utilisateur, permettant ainsi de mettre comme une sorte de mouchard. Je me vois mal mettre le login et mot de passe dans une table pour un mouchard.
amine_hassini Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 16 avril 2007
16 avril 2007 à 06:05
Slt, Bien que je ne suis pas un expert en php, je suis entièrement d'accord avec FHX et pour s'en convaincre tapez votre identifiant sur msn ou de yahoo ou peu importe, et un mot de passe faux : vous remarquerez que le site ne répondra jamais en disant que "le mot de passe est incorrecte". Il répondra toujours "l'identifiant ou le mot de passe est incorrect". Parole de professionnelless ! ;)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 avril 2007 à 20:41
Non, ce n'est pas une faille. C'est une erreur de logique.

Le login et le pass, c'est un couple. Tu testes un couple... donc tu testes 2 choses en même temps.
Ce que tu peux faire en 1 temps tu le fais en 2 :
--> Le fait de récupérer le mot de passe de la base de donnée en testant le login.
--> Le fait de tester le mot de passe après sa récupération.

Pourquoi ne pas inclure ce double test directement en SQL ? Comme si SQL ne savait pas faire ce genre de chose ! C'est une perte évidente de temps... En plus, à quoi cela va servir de dire "Erreur de mot de passe" ? A rien du tout. Autant dire que le couple login/pass est mauvais et on en parle plus.

Imaginons un scénario type :
J'ai un utilisateur en mode super-user (ayant tous les droits sur le site), mais dont le login est inconnu pour tout le monde (nous dirons que son login, c'est xxxadminxxx, son pass yyyadminyyy). Je me fais un petit robot et je balance un gros dictionnaire ou n'importe quel type de bruteforce.
Donc avec ta méthode, je vais tester :
-> xxxadmin ==> (pas de msg d'erreur, cela est dû à une erreur de programmation de ta part, tu n'as pas testé le fait qu'un login pouvait être mauvais.)
-> xxxadminx ==> pareil
-> xxxadminxx ==> pareil
-> xxxadminxxx ==> "Ton Pass ne correspond pas à celui de la BDD"

Ouh la, grosse erreur !! La, ca veut dire que le robot sait que le login existe, mais que le mot de passe est mauvais. Et la, attend toi au pire.

Avec ma méthode, si le login ou le passe est mauvais, il renverra toujours la même erreur. Impossible de savoir si c'est l'un ou l'autre qui est mauvais.


Je ne parle même pas de perte de temps d'éxécution dû au ( if ($data['passwd']) == $_POST['passwd']) ) qui exécute un strcmp() en C donc une instruction inutile ici quand, dans ta requète SQL, tu peux faire un COUNT(*) qui est plus rapide.

Voila pourquoi je déconseille très fortement le test en PHP, il ne sert à rien.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
15 avril 2007 à 14:58
Je ne suis pas vraiment d'accord avec toi FhX... personnellement je préfère vérifier si l'utilisateur existe et récupérer son pass pour vérification... à chacun sa façon de faire... .. . ;o)

@ tchaOo°
wouwou1 Messages postés 10 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 15 avril 2007
15 avril 2007 à 00:44
Reste calme FhX... ;-)

Dis moi pourquoi ma méthode n'est pas bonne.
Je suppose que c'est une faille de sécurité???
Ca m'aiderai parce que tous les sites que j'ai fait ont ce script...

Bye
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
14 avril 2007 à 18:08
" $mysql = "SELECT password FROM ta_table WHERE login='".$_POST['login']."'";
$req = mysql_query($mysql) or die('Erreur SQL !
'.$mysql.'
'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['password'] != $_POST['password']) {

echo "Ton Pass ne correspond pas à celui de la BDD";

}"

NON NON NON NON NON ET NON !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Rahhhhh jvais m'énerver !!!!!!!!!

Il faut faire le test du mot de passe EN MEME TEMPS que le test de login !!!!
SELECT COUNT(*) FROM .... WHERE login $login AND passwd $passwd;

Si la requète renvoit faux, alors le couple login/passwd n'est pas bon.


Pourquoi vouloir à tout prix faire le test en PHP ???!!!
wouwou1 Messages postés 10 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 15 avril 2007
14 avril 2007 à 12:53
Bien Maître...lol

Bye
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 avril 2007 à 11:27
$mysql = 'SELECT password FROM ta_table WHERE login=\''.mysql_real_escape_string($_POST['login']).'\'';

Ca évitera des sql injections... .. . ;o)

@ tchaOo°
wouwou1 Messages postés 10 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 15 avril 2007
14 avril 2007 à 08:35
Salut.

Tu ne fais que récupérer deux variables. Il faut que tu testes tes variables par rapport a celles dans ta BDD. Sinon je suis au regret de t'annoncer que ton script ne sert à rien.

Comme ca, ca protège déjà un peu mieux :


<?

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) {



$database = mysql_connect('hote', 'utilisateur', 'pass');


mysql_select_db('ta_base',$database);


$mysql = "SELECT password FROM ta_table WHERE login='".$_POST['login']."'";
$req = mysql_query($mysql) or die('Erreur SQL !
'.$mysql.'
'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['password'] != $_POST['password']) {

echo "Ton Pass ne correspond pas à celui de la BDD";

}
else {
session_start();
$_SESSION['login'] = $_POST['login'];

echo "Tu es bien connecté";

}
}
else {

echo "Tu as oublié de remplir un champ";

}


?>

# <form method="post" action="exemple1.php">
# <label>Nom d utilisateur : </label>

# <label>Mot de passe : </label>


#
#
# </form>


Certes c'est pas du grand art mais ca marche.
Apres faut que tu protèges chacune de tes pages d'administration, mais je vais pas tout te faire y'a déjà plein de codes là dessus.

Bye
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 avril 2007 à 01:36
o_Ô

Mais ça protège rien ta source il y a aucune identification là... .. .

@ tchaOo°
Rejoignez-nous