SVP, de l'aide sur du php sécurisé ;-)

[Résolu]
Signaler
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005
-
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005
-
bonjour,

j'ai fais un site,
( et je voudrai maintenant mettre en place un systeme d'authentification
pour autoriser certaines personnes à
modifier ou supprimer ou meme rajouter des element dans la bases.

pour cela, j'ai fais plusieurs formulaires: ajouter, supprimer; modifier
qui modifie, supprime et ajoute des elements dans ma base de données access.)

pour l'authentification, voila ce que j'ai fais:

j'ai créer un formulaire en html

<CENTER>
Identification
</CENTER>
<CENTER>
<FORM action=validation_identification.php method=post>
Pseudo :,
,
----

Mot de passe :,

</FORM></CENTER>

quand je tape tata et tatat il me met l'identification est correcte
quand je tape tata et dgl Erreur : Le compte n'existe pas ou le mot de passe est incorrect

j'ai créer une table tbl_membre
avec les champs pseudo et mdp
-------------------------
pseudo ||| mdp
--------- -------------
toto totot
tata tatat
titi titit

mais j'ai remarqué que rien de tout ça n'est sécurisé
pouvez vous me dire ce que je peux faire pour sécurisé tout ça!!!!

merci d'avance

50 réponses

Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
ben justement dans ta base le mot de passe doit etre crypter

si tu enregistre manuellement dans ta base tu fait d'abord echo md5('tatat');
tu met dans la base ce que le echo t'affiche ! (32 caracteres)

si c'est automatiquement insérer dans ta base, tu fait une requete INSERT avec le mot de passe crypter md5($pass)

ta requete pour verifier l'identification à l'air bonne

mais j'insiste, ton champ pass dans ta base doit contenir des chaine de ce style :

9e942e7ed3127842232fd87a55db0d39


Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
salut,

ben il faut que tu crypte le mdp !!! c'est tout

tu peut utiliser md5(), je m'explique

quand tu enregistre dans ta base, à la place d'enregistrer $mdp tu enregistre md5($mdp)

en fait ton mdp est crypter en héxa (32 caractéres)
et voila c'est sécurisé

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
153
Date d'inscription
vendredi 9 août 2002
Statut
Membre
Dernière intervention
18 septembre 2009

La sécurisation est quelque chose de complexe...

Regarde du coté du protocole HTTPS
Sinon, crypte tes mots de pass en MD5 (fonction md5($string)) dans ta base pour qu'ils soient un minimum sécurisés...

Quand tu concatène tes chaines pour faire tes requètes :
$req="SELECT * FROM talbe WHERE pseudo='".$pseudo."' AND pass='".md5($pass)."'";
N'oublie jamais de mettre la fonction mysql_escape_string() qui te protégera contre les attaques SQL Inejction...

$req="SELECT * FROM talbe WHERE pseudo='".mysql_escape_string($pseudo)."' AND pass='".md5($pass)."'";

Voilà...
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005

oui j'ai cripté avec md5($mdp)

mais le probleme, c'est que ça n'a rien changer, et meme si je mets le bon mot de passe, il me met Erreur : Le compte n'existe pas ou le mot de passe est incorrect
(je crois qu'il compare le mot de passe tapé encrypté et le mot de passe de la base qui n'ai pas encrypter, enfin ché pas trop)

comment je dois faire, j'ai pas trop compris ce que fais mon code

pour info voila mon code:

d'abord le formulaire:
<html>
<head>
<title>Identification</title>
</head>

<center>Identification
</center>
<center>
<form action='validation_identification.php' method='post'>
Pseudo :,
,

----

Mot de passe :,




</form>
</center>

</html>

et la page de validation

<html>
<head>
<title>Validation identification</title>
</head>


<?


include ("connexion.php");

$pseudo = $_POST['pseudo'];
// $mdp = $_POST['mdp'];


//requete pour voir si l'identification correspond a un enregistrement

$req= odbc_exec( $cnx, "SELECT * FROM tbl_membre WHERE pseudo_membre='$pseudo' AND mdp_membre= '".md5($mdp)."'");

$result = odbc_fetch_array($req);


//si le membre existe dans la base de donnees alors
if ($result){
echo "L'identification est correcte";
}
//si il n'existe pas
else{
echo "Erreur : Le compte n'existe pas ou le mot de passe est incorrect";
}


odbc_close($cnx); // fermer la connexion


?>



</html>

Un pour tous, tous pour un!!!
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005

je peux pas mettre mysql_escape_string, je suis sur une base acces,
je vais cherché c'est ptet odbc_escape_string

Un pour tous, tous pour un!!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,



lol ben evidemment ds ce cas...

Le principe : ton utilisateur s'enregistre, il tape son mot de passe. TU le cryptes TOUT DE SUITE.

Tu le stockes dans la base tel quel, CRYPTE.

Il revient plus tard pour se logger. IL tape son mot de passe en
clair lui, evidemment. Tu le cryptes tout de suite, puis tu compares ce
mot de passe crypte a celui, crypte aussi, present dans ta base. Ca
correspond, il passe, ca correspond pas, il est rejete.
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005

enfin si je comprend mon code mais comprend pas pourquoi il me met erreur meme quand je tape le bon mot de passe!!!

Un pour tous, tous pour un!!!
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
et pour corriger un peu ton code quelque conseil


pour le code html utilise les normes du w3c :

plus de <center> mais du css : style="text-align:center;"

pas de simple quotes pour le parametres html, seulement des doubles quotes



pour le php

<?php à la place de <?

remplace

$pseudo = $_POST['pseudo'];

par

if(isset($_POST{pseudo']))
$pseudo = $_POST['pseudo']; else $pseudo='';



bon voila en gros quelque principe à respecter


Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
utilise addslashes() à la place de mysql_escape_string()

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005

les utilisateurs ne s'enregistre pas, c'est moi qui met directement dans la base le nom et le mot de passe( pour simplifier je commencerai à mettre pour tous le meme mot de passe)

mon but:
on est 10 personnes, et je voudrai que seulement les 10 personnes ont la possibilité de rajouté des infos(via les formulaires que j'ai fait)

Un pour tous, tous pour un!!!
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005

mais je ne veux pas que les formulaires se voit pas les autres (les gens qui ne font pas partie des 10 de la base)

Un pour tous, tous pour un!!!
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
baaah je comprend rien
les formulaires ne se veront pas si tu sécurise l'accés par ce formulaire ci

pour les voir il faudra le login et le mdp correspondant !

je vois pas ce que tu veut de plus

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Tu mets ces mots de passe non crypte dans ta base, ou cryptes ?

A mon avis le probleme est la.

Ils doivent tre cryptes dans ta base, ils doivent etre stockes cryptes.
Comme ca ensuite tu compares le mot de passe crypte rentre par
l'utilisateur (c'est toi qui le crypte a la volee evidemment), a celui
crypte dans ta base.
Messages postés
110
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
16 juin 2005

si si j'ai compris,
mais je disai que pour entrer les pseudos et les mots de passe dans la base, je tape directement dans les champs de ma table.
je tape directement tata et tatat (je ne fais pas de insert)

c'est tout!
il faut que je trouve un moyen pour que les mots de passe soit crypter dans ma base!!!
(ptet créer un formulaire pour que l'admin puisse ajouter des pseudos et mot de passes, et en ajoutant dans la base je metterai md5($mdp) )

si vous avez une autre solution, on si vous savez crypté en md5 sous access, n'hesiter pas

Un pour tous, tous pour un!!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Bah oui, c'est exactement ce qu'il faut lol.



OU un script tout bete hein, tu le fais a la main.



genre :



$pass = array ('motdepasse1', 'motdepasse2'...etc);

foreach ($pass as $val)

echo md5($val), '
';



et tu fais un copier coller dans ta base.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



personnellement pour éviter les failles de SQL injection tout en
évitant une gestion complexe des pseudos aux caractères spéciaux, je
les interdit purement et simplement :



if(!eregi("[\^'$()*+<>?#"{}\\]",$chaine))

{

//C'est bon, autorisé

}



a +

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Au fait, si tu veux crypter d'un coup tous tes mots de passe en md5 dans ta base :



imaginons que tu aies un champ passe :



UPDATE table SET passe=md5(passe)



voilà :-)



Ensuite si tu veux insérer un mot de passe :



INSERT INTO table VALUES (md5(1234))



par exemple, ça t'enregistrera le md5 de "1234"



a ++

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Ah moi pour proteger contre les injections sql, perso, j'utilise plutot ca :



http://fr3.php.net/manual/fr/function.mysql-real-escape-string.php
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
C'est pas mal non plus et ça fonctionne pour toutes les chaînes :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Pi ca a ete fait pour, alors pour pas que les codeurs travaillant sur
l'amelioration de PHP de sentent delaisses...j'utilise au maximum les
fonctions specifiques qu'ils concoctent avec amour ;-)