Le site des frites, représentation de ma belge attitude [Avi] - PHP - Programmation
Marsh Posté le 06-04-2006 à 20:04:14
Super sans m'inscrire j'arrive a me loggué
Casses toi encore un peu le cul sur le php parceque la c'est une passoire ?
Marsh Posté le 06-04-2006 à 20:21:36
Fiou j'avais rien vu ! Voila j'ai modifié la "petite" erreur.
Marsh Posté le 06-04-2006 à 20:24:37
Toujours pareil chez moi
edit: franchement revois bien ton code, j'ai pu me loguer sous ton pseudo et modifier tes info perso, avec seulement un peu de jugeote
Bon si tu trouves pas d'ici demain jte dirais comment éviter tout ça parceque la ça craint
Sinon le concept a l'air sympa
Marsh Posté le 06-04-2006 à 20:25:12
Explique !?
Edit : Arff rien à dire t'es puissant .
Ca doit être un prob avec le md5 ou un truc dans le genre mais bon là je creuse enfin jvais trouver.
Stp tu peux ne pas trop 'foutre la merde' sur le site pendant que l'erreur n'est pas réparée ?? Merci
Edit(2) : C'est bon j'ai trouvé comment me protégé, merci beaucoup .
Marsh Posté le 06-04-2006 à 20:29:17
Test et corrige s'il le faut, TOUTES INFORMATIONS rentrées dans un formulaire
Avec une injection sql toute simple j'ai réussi a me logguer avec ton pseudo et modifier tes infos
edit: quoique meme sans injection sql, en mettant n'importe quel mot de passe, on peut ce loguer :x
edit2: bon pour les trucs de base, revois bien toutes tes requetes, met un maximum de caracteres pour chaque champs de ton formulaire (pour eviter de mettre des requetes a l'interieur par exemple , 12 caractere pour un pseudo est un passe c'est générallement suffisant), ensuite a la reception des info rentrées dans le formulaire:
-tu utilises une fois ta donnée récup du addStripSlashes() + htmlspecialchars() il me semble, ça évite pas mal de bordel. Enfin j'espere que tu ne stocks aucun password en clair dans t'as bdd. Enregistre les en md5 au moins (bien que ça ne soit plus très fiable), et ensuite pour tes requetes tu compares le md5 de ta BDD et le md5 passé dans le formulaire (et traité avec addSlash... etc )
Marsh Posté le 06-04-2006 à 20:38:01
je dirais pas mieux que InTheWindd, j'ai pu également me connecter rapidement à ton compte, lechokapik
Marsh Posté le 06-04-2006 à 20:55:35
J'ai sécurisé en interdisant quelques caractères ou chaine de caractères, mais c'est surement toujours vulnérable.
Marsh Posté le 06-04-2006 à 21:17:40
regarde du coté de mysql_real_escape_string et htmlentities
Marsh Posté le 07-04-2006 à 00:09:17
J'ai peur de la requete qui se cache derrière, on peut se connecter avec des comptes qui existe pas Le site aime pas du tout par contre ...
Marsh Posté le 07-04-2006 à 09:03:59
Avec root/root, j'ai réussi à me conncecter, c'est normal? Mais après, j'arrive sur des pages sans graphiques, toutes moches.
Rem : "Bienvenue sur l'insistant de modification de donnée." -> ça serait pas plutôt "assistant de modification"?
Marsh Posté le 07-04-2006 à 10:06:01
Phpuck a écrit : J'ai sécurisé en interdisant quelques caractères ou chaine de caractères, mais c'est surement toujours vulnérable. |
Tu as un message qui t'attends
Marsh Posté le 07-04-2006 à 10:43:51
Bon jviens de sécuriser mais un peu trop on dirait , plus personne n'arrive à se connecter .
Mon code :
$id = htmlentities($_POST["id"]);
$passe = htmlentities($_POST["motdepasse"]);
$requette = mysql_query("SELECT COUNT(*) AS nbr_ent FROM table WHERE id='$id'" );
$resultats = mysql_fetch_array($requette);
$reponses = mysql_query("SELECT COUNT(*) AS nbr_entre FROM table WHERE id='".$id."' AND motdepasse='".md5($passe)."'" );
$donne = mysql_fetch_array($reponses);
if ($resultats['nbr_ent'] == "0" ){
$_SESSION["membre"] = FALSE;
echo '<font face="verdana">Mauvais Login</font>';
}elseif ($id == "" OR $passe == "" ){
$_SESSION["membre"] = FALSE;
echo '<font face="verdana">Vous devez entrer une donnée</font>';
}elseif($donne['nbr_entre'] == "0" ){
$_SESSION["membre"] = FALSE;
echo '<font face="verdana" color="orange">Mauvais Pass/Login</font>';
}elseif (preg_match("!\/\/|\;|\'\"|shutdown with nowait|master..xp!i", $id )){
$_SESSION["membre"] = FALSE;
echo '<font face="verdana">Des caractères inscrits ne sont pas accepté</font>';
}elseif (preg_match("!\/\/|\;|\'\"|shutdown with nowait|master..xp|\(!i", $passe )){
$_SESSION["membre"] = FALSE;
echo '<font face="verdana">Des caractères inscrits ne sont pas accepté</font>';
}else{
Et il m'affiche tout le temps :
Mauvais Pass/Login
Edit : Après quelques testes, l'erreur viendrait de la comparaison entre les md5 :S
Marsh Posté le 07-04-2006 à 11:56:45
Mon dieu. Il va falloir tout revoir.
utilises les strip_tags, mysql_real_escape_string et tutos pour securiser.
qu'est-ce que c'est que c'est preg_match?
Pour les requetes, une seule va suffire.
SELECT 1 FROM table WHERE id="' . $tonidtraité . ' AND motdepasse=md5("' . $tonpwdtraité . '" )
Si la requete retourne un enregistrement, c'est qu'un membre existe pour les données. Bien sur, verifie les variables en entrée.
Marsh Posté le 07-04-2006 à 15:00:04
Bon j'ai utilisé une autre technique :
Code :
<?php
if (!isset($_SESSION['membre'])) $_SESSION['membre'] = false;
if ($_POST['id'] != "" AND $_POST['motdepasse'] != "" )
{
$id = htmlentities(addslashes($_POST['id']));
$passe = htmlentities(addslashes($_POST['motdepasse']));
mysql_connect("", "", "" );
mysql_select_db("" );
$sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM table WHERE id='".$id."'" );
if (mysql_result($sql,0,'nb_pseudo') != 0)
{
$sql_info = mysql_query("SELECT * FROM table WHERE id='".$id."'" );
$donnees_info = mysql_fetch_array($sql_info);
if ($donnees_info['motdepasse'] == md5($passe))
{
$_SESSION['membre'] = true;
$_SESSION['membreid'] = $donnees_info['id'];
etc
Le problème vient toujours de la comparaison entre les hashage md5 !
Pouvez vous m'aider ??? Merci
Marsh Posté le 07-04-2006 à 16:14:06
Up, désolé j'ai vraiment besoin de reponses et de solutions . Merci bien
Edit : Serait il possible que la cause vienne du fait que j'ai hasher deux fois le mot de passe (mais je suis pas sur de ça) ??
Marsh Posté le 07-04-2006 à 16:21:57
il te faut comparer un hash avec un autre. Les mots de passe dans la base doivent etre hashés.
Marsh Posté le 07-04-2006 à 18:50:14
Je sais mais ca foirre .
J'ai vraiment besoin d'aide en urgence ce serais sympas merci .
Marsh Posté le 07-04-2006 à 18:55:56
deja htmlentities, c'est pour proteger l'affichage, pas pour proteger l'acces à la base. Il faut utiliser mysql_real_escape_string pour faire ça.
ensuite, comme ça t'as déjà été inidiqué, tu n'as besoin que d'une requete :
SELECT COUNT(*) AS nb_pseudo FROM table WHERE
id='".mysql_real_escape_string($id)."' and motdepasse = "'.mysql_real_escape_string(md5($passe)).'"'
au moment ou tu fais cette requete, $passe ne doit pas être encrypté, et le mot de passe dans la base doit l'etre naturellement.
Marsh Posté le 07-04-2006 à 19:19:25
Et le count(*) est remplacable par un SELECT 1, le user etant forcement unique.
Marsh Posté le 07-04-2006 à 19:29:18
Bon alors, le problème c'est sur maintenant vient de la comparaison des mot de passe en md5 pourtant je ne comprends pas ou est l'erreur .
Marsh Posté le 07-04-2006 à 19:32:24
tu as afficher ta requete pour la débugger ? ça donne quoi ? la table dans la base contient quoi pour cet utilisateur ? Tu as fait ce qu'on t'a dit ?
Marsh Posté le 07-04-2006 à 19:41:33
Bon alors mon code pour l'instant :
if (!isset($_SESSION['membre'])) $_SESSION['membre'] = false;
if ($_POST['id'] != "" AND $_POST['motdepasse'] != "" )
{
$id = $_POST['id'];
$passe = $_POST['motdepasse'];
mysql_connect("", "", "" );
mysql_select_db("" );
$requette = "SELECT 1 FROM table WHERE id='".mysql_real_escape_string($id)."' AND motdepasse = '".mysql_real_escape_string(md5($passe))."'";
$resultat = mysql_query($requette);
if ($donnees_info = @mysql_fetch_array($result))
{
$_SESSION['membre'] = true;
$_SESSION['membreid'] = $donnees_info['id'];
[etc]
Donc ça affiche toujours :
Votre login ou mot de passe est invalide (invisible dans la partie code que je vous ai donné)
Pour la base de donnée les mot de passe sont crypté un md5 heu voila je croix que c'est tout j'ai fais ce que vous m'avez dit .
Marsh Posté le 07-04-2006 à 19:45:41
mais il n'existe pas ton champ id dans le retour. A quoi il correspond? Le pseudo? Ou l'identifiant interne du membre?
Marsh Posté le 07-04-2006 à 19:54:32
tu as fais un 'echo $requette;' ?
on s'en fout de savoir ce que ça affiche. On veut savoir ce que donne la requete, ce que contient l'enregistrement dans la base pour cet utilisateur
tu as essayé d'afficher $requette et de la balancer directement dans la base (avec phpmyadmin par exemple) ?
Marsh Posté le 07-04-2006 à 20:05:30
C'est mysql_real_escape_string(md5($passe)) ou md5(mysql_real_escape_string($passe)) plutôt ?
Et le md5() ne joue-t-il pas au finale le même rôle que mysql_real_escape_string() ?
Marsh Posté le 07-04-2006 à 20:14:18
Bizare de plus en plus bizare, j'ai affiché donc la requette et j'ai pris le mot de passe qu'il affichait et j'ai comparé avec mon mot de passe que j'ai hashé en md5 enfin c'est coufus je sais, mais disons que j'ai simplement affiché mon code hashé dans un echo et mis une variable ou je hashe mon mot de passe (pas encore hashé) et j'affiche la variable et ça ne donne pas la même chose
Marsh Posté le 07-04-2006 à 21:29:44
Tien voila un exemple assez vieux que j'avais fait pour un site, je codais pas encore comme aujourd'hui mais bon si ça peu t'aider...
C'est une fonction d'authentification, y'avais par session, cookie et par formulaire.
Code :
|
Bon le fichier que j'ouvre défois c'est pour faire une connexion a ma base. Bon je prennais en compte que $result était true, c'est que j'avais un enregistrement donc que c'était bon (ce qui n'est pas judicieux)... Et enfin j'avais 2 fois le meme bout de code, j'aurai du faire une fonction en plus. Bref tu peux t'en inspirer si tu veux...
Bref c'est vieux est moche, mais bon ça marchais a l'époque , aujourd'hui j'aurai pas codé ça comme ça, mais bon inspire toi en...
ps: je connaissais pas elseif aussi
edit 2 : j'utilisais à cette epoque ce bout de code pour éviter les trucs pas beau rentré par l'utilisateur
Je sais plus ce que ça vaut mais bon... ça fait un bout de temps que j'ai pas refait de php...
Code :
|
Marsh Posté le 08-04-2006 à 00:15:37
Après une "petite" recherche j'ai trouvé l'erreur de hashage mais n'ai pas su le reglé.
Voici l'exemple d'un code codé
Le code tapé : ec3ac16a6c949d9dc8f67d9c9c037bff
Le code pris de la base : ec3ac16a6c949d9d
Donc avec les couleur on distingue bien la premiere partie du code qui est la même qu'en dessous (rouge) mais ensuite une série de caractère s'ajoute (bleu) et je ne vois pas bien d'ou ils viennent
Marsh Posté le 08-04-2006 à 09:31:11
Vérifie la taille du champs dans la base de données. Je pense qu'il doit être trop petit donc ça coupe la fin.
Marsh Posté le 08-04-2006 à 10:14:51
Phpuck a écrit : Après une "petite" recherche j'ai trouvé l'erreur de hashage mais n'ai pas su le reglé. |
un md5 est codé sur 32 caracteres. Tu aurais pu lire la doc sur mysql avant de faire la modif.
Marsh Posté le 08-04-2006 à 10:16:25
Kyfun a écrit : Tien voila un exemple assez vieux que j'avais fait pour un site, je codais pas encore comme aujourd'hui mais bon si ça peu t'aider...
|
de gros defauts dans ton code comme le manque de blindage des variables en COOKIE, le mot de passe en clair dans le COOKIE.
Marsh Posté le 08-04-2006 à 12:19:13
Toutafait d'accord C'est bien pour ca que j'ai dis que c'est vieux mais que ça peut l'inspirer
Marsh Posté le 06-04-2006 à 19:58:09
Peut être ce sujet n'est pas dans la bonne catégorie, si c'est le cas j'en suis navré mais je le poste dans cette partie car voici 1 moi que je me casse le c*l sur la programmation php de ce site mais tout va bien j'aime faire ça .
Le lien ??? http://nbsclan.free.fr/cmfrites
Inscription requise !
Dites moi ce que vous en pensez,
merci bien !