Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
923 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Faille dans script

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Faille dans script

n°1042114
shrito
Posté le 10-04-2005 à 17:27:14  profilanswer
 

Bonjour je fait un script (de récupération de mot de pass perdu) dans le cadre de mon forum perso et je voudrai savoir si vou y voyez des failles de sécurité...
 
Le principe est simple un formulaire demande a la personne d entrer l adresse mail d inscription, ce formulaire envoie ensuite sur cette page... ( ou $email est la varibale issue du nom de formulaire dans lequel l utilisateur entre son adresse)
 

Code :
  1. <?
  2. $test=0;
  3. $email=str_replace("'", "", $email);
  4. $email=str_replace(";", "", $email);
  5. $email=str_replace('"', '', $email);
  6. $email=str_replace("$", "", $email);
  7. $email=str_replace("<", "", $email);
  8. $email=str_replace("\\", "", $email);
  9. $log_pass=file_get_contents('hrtb/gxsc/nfia.ext');
  10. $log_pass=unserialize($log_pass);
  11. mysql_connect($log_pass["domain"], $log_pass["pseudo"], $log_pass["pass"]);
  12. $base= mysql_select_db($log_pass["pseudo"]);
  13. $passv=$log_pass["base"];
  14. if (!$base)
  15. {
  16. echo "impossible d'ouvrir la base !";
  17. }
  18.    $req = "SELECT pass, pseudo FROM $passv";
  19.    $req .= " WHERE email = '" .$email . "'";
  20.    $result = mysql_query($req);
  21.    $test= mysql_num_rows($result);
  22.    list($pass, $pseudo) = mysql_fetch_array($result);
  23. mysql_close();
  24. if ($test!=0)
  25. {
  26. $adressse=$email;
  27. $titre="Mot de pass";
  28. $message="Voici ton mot de pass pour le forum D-Versi0n : ".$pass."\n\nPour te logger clique ici : http://nitroseb.free.fr/GoGoL2/for [...] 34;.$pass;
  29. mail($adressse, $titre, $message,
  30.      "From: canvas@oreka.com\r\n"
  31.     ."Reply-To: canvas@oreka.com\r\n"
  32.     ."X-Mailer: PHP/" . phpversion());
  33. echo '<div align="center"><br><br><b>Un mail vous a été envoyé à l\'adresse mail spécifiée</b><br><br><a href="index.php">retour</a></div>';
  34. }
  35. else
  36. {
  37. echo '<div align="center"><br><br><b>Votre mail n\'est pas enregistré dans la base.</b><br><br><a href="javascript:history.back();">re-essayer</a></div>';
  38. }
  39. ?>


 
Merci pour votre réflexion... :)


Message édité par shrito le 10-04-2005 à 17:28:40
mood
Publicité
Posté le 10-04-2005 à 17:27:14  profilanswer
 

n°1042126
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 17:34:27  profilanswer
 

bon, je suis surement pas une reference en PHP mais si j'ai bien compris et interprete tes str_replace, il serai preferable de faire un htmlentities sur $mail.  :??:  
ou alors peut-être une bête de truc genre:
 

Code :
  1. if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $email))
  2. {
  3. // ton bazarre
  4.  }
  5. else{
  6.  echo "essai pas de me niqueyyy. :p";
  7.  }


comme ça il risque pas de mettre du code dans ton champ de saisie.  :)  
 
enfin je dis ça comme ça hein, moi aussi je débute.  :o
 
edit:
 
et là à mon avis faut faire un exit.

Code :
  1. if (!$base)
  2. {
  3. echo "impossible d'ouvrir la base !";
  4. exit;
  5. }


Message édité par pmusa le 10-04-2005 à 17:39:26
n°1042132
KangOl
Profil : pointeur
Posté le 10-04-2005 à 17:38:06  profilanswer
 

et ta sérialisation de ton mot de passe c'est pas top !!
n'importe qui peut le récupérer et le desérialisé lui meme...


---------------
Nos estans firs di nosse pitite patreye...
n°1042133
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 17:40:32  profilanswer
 

KangOl a écrit :

et ta sérialisation de ton mot de passe c'est pas top !!
n'importe qui peut le récupérer et le desérialisé lui meme...


 :hello:  
ça veut dire quoi?
 
merci

n°1042134
KangOl
Profil : pointeur
Posté le 10-04-2005 à 17:42:08  profilanswer
 

et faudrait peut etre mettre les register global a off...
 
http://nitroseb.free.fr/GoGoL2/for [...] eeeest.ext


---------------
Nos estans firs di nosse pitite patreye...
n°1042135
kalex
Posté le 10-04-2005 à 17:43:10  profilanswer
 

pmusa a écrit :

:hello:  
ça veut dire quoi?
 
merci


Ca veut dire qu'on peut télécharger nfia.ext et le deserialiser sur sa propre machine.
 
 

pmusa a écrit :

bon, je suis surement pas une reference en PHP mais si j'ai bien compris et interprete tes str_replace, il serai preferable de faire un htmlentities sur $mail.  :??:  
ou alors peut-être une bête de truc genre:
 

Code :
  1. if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$", $email))
  2. {
  3. // ton bazarre
  4.  }
  5. else{
  6.  echo "essai pas de me niqueyyy. :p";
  7.  }


comme ça il risque pas de mettre du code dans ton champ de saisie.  :)  
 
enfin je dis ça comme ça hein, moi aussi je débute.  :o


Ou un bête addslashes, il restera compatible avec les ndd utf8 de l'avenir. :o


Message édité par kalex le 10-04-2005 à 17:44:32
n°1042136
shrito
Posté le 10-04-2005 à 17:43:13  profilanswer
 

ui tu m explique commen faire pour récupérer mon mpd de BDD ???
 
Pour le ereg.. je suis d accord, j ai juste rajouté ca a l arrache ;)

n°1042142
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 17:47:35  profilanswer
 

kalex a écrit :

Ca veut dire qu'on peut télécharger nfia.ext et le deserialiser sur sa propre machine.


can u repeeeeeat pleeeaaase??  :ouch:  :ouch:  
nfia.ext, c'est quoi, les extensions de la librairie?? ça se telecharge?  :sweat:  
 
 

kalex a écrit :


Ou un bête addslashes, il restera compatible avec les ndd utf8 de l'avenir. :o


pas la peine. la fin du monde est proche...  [:aloy]
 
edit:
 
c'est kouèèè register global??? c'est quand ça nous affiche les messages d'erreur.  :??:  
 
bah la preuve, le gars en connait la presence de ton fichier nfia.ext.  :D  
y'a des bêtes du PHP ici.  :sol:


Message édité par pmusa le 10-04-2005 à 17:51:03
n°1042144
shrito
Posté le 10-04-2005 à 17:49:06  profilanswer
 

nfia.ext c'est le fichier dans lequel je met tout les info sur ma BDD SQL, pass etc... mais il est dans un repertoire protégé par htaccess donc... je vois pas comment on pourrait le récupérer....

n°1042146
kalex
Posté le 10-04-2005 à 17:50:26  profilanswer
 

pmusa a écrit :

can u repeeeeeat pleeeaaase??  :ouch:  :ouch:  
nfia.ext, c'est quoi, les extensions de la librairie?? ça se telecharge?  :sweat:


Apparemment c'est le fichier serialisé dans lequel il stoque son mdp mysql...
 
edit : Si c'est récupérable avec des includes par ex : à ne pas faire !


Message édité par kalex le 10-04-2005 à 17:51:46
mood
Publicité
Posté le 10-04-2005 à 17:50:26  profilanswer
 

n°1042153
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 17:55:27  profilanswer
 

comment tu as su qu'il avais un fichier affublé de ce nom là dans son repertoire PROTEGE.  :pt1cable:  
les gars tu leur passe un bout de code, ils te cartographient tout ton site.  :lol:

n°1042156
kalex
Posté le 10-04-2005 à 17:57:40  profilanswer
 

C'est écrit en toutes lettres à la 9eme ligne de son code. ;)

n°1042171
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 18:08:49  profilanswer
 

effectivement.  :)  
question:
quand on fait un file_get_contents() et que le fichier cible est protégé par un .htaccess, il demande pas une identification le fichier appelant?  :ouch:  
je demande pour savoir, parce que sinon oui, avec un include c'est recuperable.  :??:  
 
je connaissait pas la fonction (un)serialize()  :??:  
c'est un truc comme base64_encode() ???

n°1042174
shrito
Posté le 10-04-2005 à 18:13:36  profilanswer
 

pmusa a écrit :

effectivement.  :)  
question:
quand on fait un file_get_contents() et que le fichier cible est protégé par un .htaccess, il demande pas une identification le fichier appelant?  :ouch:  
je demande pour savoir, parce que sinon oui, avec un include c'est recuperable.  :??:  
 
je connaissait pas la fonction (un)serialize()  :??:  
c'est un truc comme base64_encode() ???


 
(un)serialize() ca sert a pouvoir stocker un tableau dans un fichier...
file_get_content passe a travers les htaccess mais je vois pas comment ton include pourra te permettre de récupérer le pass...

n°1042185
kalex
Posté le 10-04-2005 à 18:22:25  profilanswer
 

Sur cette unique page peut-être.
Mais sur un site on a souvent plusieurs scripts installés (news, forum, blog, etc) et à la 1ere faille d'include dans l'un d'eux... Aïe. :/

n°1042187
shrito
Posté le 10-04-2005 à 18:23:45  profilanswer
 

lol ce type de faille include... fo pas compter sur moi pour les laisser... ;)


Message édité par shrito le 10-04-2005 à 18:24:01
n°1042195
kalex
Posté le 10-04-2005 à 18:32:58  profilanswer
 

- Si ton forum est destiné uniquement à ton site.
- Si tu installes aucun script tier sur le même compte.
- Si tu as confiance en toi.
Alors : d'accord. :D

n°1042197
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 18:35:27  profilanswer
 

et comment s'en proteger de cette faille? j'utilise include(), j'ai pas envie que mes visiteurs l'exploitent à mauviais escient.  :D

n°1042200
shrito
Posté le 10-04-2005 à 18:38:19  profilanswer
 

en gros... quand tu fais un include ne jamais faire:
 
include($variable) ou variable est définie par la page précédente, un formulaire ou autre... register global off peut permettre de s en protéger ;)
 
une solution existe pour utiliser un include aléatoire...
 
$var["page1"]=nom_page1.php;
$var["page2"]=nom_page2.php;
$var["page3"]=nom_page3.php;
$var["page4"]=nom_page4.php;
$var["page5"]=nom_page5.php;
 
tu crée un tableau avec les pages autorisée...
ensuite :
 
include ($var[$variable]);
 
comme ca le include pourra se faire que sur une page autorisé ;)


Message édité par shrito le 10-04-2005 à 18:40:35
n°1042202
kalex
Posté le 10-04-2005 à 18:39:49  profilanswer
 

http://frederic.bouchery.free.fr/? [...] -Ou-Felure
 
Ou la version google cache, car free a encore l'air de déconner ( :fou: ) :
http://64.233.183.104/search?q=cac [...] -Ou-Felure


Message édité par kalex le 10-04-2005 à 18:40:12
n°1042232
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 19:09:53  profilanswer
 

okey merci. ouais donc moi j'encours aucun problème avec mon code là:
 

Code :
  1. <?php
  2. if(isset($_GET['page']) && (file_exists('rep/'.$_GET['page'].'.php'))){
  3.         include('rep/'.$_GET['page'].'.php');
  4.  }
  5.     elseif(!isset($_GET['page'])){
  6.  include('rep/accueil.php');
  7.  }
  8.     else{
  9.     include('include/erreur.php');
  10.  }
  11. ?>


 
 :??:

n°1042237
shrito
Posté le 10-04-2005 à 19:17:21  profilanswer
 

tu utilise $_GET... donc si un gars rentre dans l adresse de la page page=../special_folder/pass_file.txt ca va passer... donc ya faille ;) du moins il me semble...

n°1042240
kalex
Posté le 10-04-2005 à 19:21:24  profilanswer
 

Oui, on peut inclure tout fichier PHP en jouant avec les ../
Mais le problème c'est pas forcément ton code : tout autre script sur le compte peut présenter une faille, même phpbb, dotclear, phpmyadmin...

n°1042249
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 19:36:12  profilanswer
 

did'jyou!  :ouch:  
encore ça va, on pourrait inclure un fichier mais qui sera forcement sur MON serveur.  :kaola:  
 
comment je peux corriger ça sinon?  :whistle:

n°1042252
shrito
Posté le 10-04-2005 à 19:40:45  profilanswer
 

bah si tu demande de remplir un formulaire, utlise method=POST et dans le script du dessus remplace GET par POST ;) sinon ya la solution dont je t aiparlé avant ou tu crée un tableau avec les seul fichier qui on le droit d etre "include"... solution pas tres viable quand tu a 30.000 fichiers ;)
 
Renseigne toi aussi sur : "register global".. le mettre sur OFF te permet de pas mal limiter les problemes ;)
 

n°1042264
kalex
Posté le 10-04-2005 à 19:48:16  profilanswer
 

pmusa a écrit :

did'jyou!  :ouch:  
encore ça va, on pourrait inclure un fichier mais qui sera forcement sur MON serveur.  :kaola:  
 
comment je peux corriger ça sinon?  :whistle:

Regarde l'article de fred.
En résumé, tu fais quelque chose comme :
 

if($_GET['page'] === 'content'){
 $file = 'content.php';
}
 
include('inc/'.$file);


Tu peux adapter ça à ta sauce comme le fait Fred. L'important c'est que le nom du fichier ne provienne pas d'une variable transmisse par l'utilisateur.
 
En PHP5 il y a la très pratique function __autoload.

shrito a écrit :

bah si tu demande de remplir un formulaire, utlise method=POST et dans le script du dessus remplace GET par POST ;)

Ca change rien.  :heink:

n°1042270
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 19:53:46  profilanswer
 

il est bien sympa fred mais quand j'ai plein de page?  :sweat:  
ce qui me plaisiat dans ma methode c'est que j'ai plus rien à declarer dans mon code après.  :)  
j'avais juste a faire  

Code :
  1. ?page=ma_page


 
comme ça, pas besoin de rajouter des lignes de code.  :jap:  
sa combine elle est bien si on a 5 pages, moi j'en ai environ ~160, par là...  :sweat:  
 
mais je peux quand même laisser comme ça hein dites?  :heink:

n°1042278
kalex
Posté le 10-04-2005 à 19:57:27  profilanswer
 

C'est qu'un include sur des fichiers PHP, c'est très méchant pour un petit site.
Fait quand même une petite regex sur ta var, ça coute rien. [:itm]

n°1042279
kalex
Posté le 10-04-2005 à 19:58:40  profilanswer
 

Sinon 160 pages, il serait peut-être temps de mettre tout ça dans une bdd ?

n°1042290
shrito
Posté le 10-04-2005 à 20:01:51  profilanswer
 

Kalex tu réponds à ca :  
 
bah si tu demande de remplir un formulaire, utlise method=POST et dans le script du dessus remplace GET par POST ;)
 
Ca change rien.
 
ta entierement raison  :lol:  je sais pas ou j avais la tete... le gars peut mettre ce qu il veut dans le fomulaire ;)

n°1042291
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 20:01:54  profilanswer
 

bah euhh les regex je suis pas encore pret a les aborder et encore moins les appliquer, ça me depasse ça.
mettre des pages dans une bdd?  :heink:

n°1042294
shrito
Posté le 10-04-2005 à 20:03:07  profilanswer
 

pmusa a écrit :

bah euhh les regex je suis pas encore pret a les aborder et encore moins les appliquer, ça me depasse ça.
mettre des pages dans une bdd?  :heink:


 
je pense qu'il parle de ce que je te proposé plutot...
 

Citation :

$var["page1"]=nom_page1.php;
$var["page2"]=nom_page2.php;
$var["page3"]=nom_page3.php;
$var["page4"]=nom_page4.php;
$var["page5"]=nom_page5.php;
 
tu crée un tableau avec les pages autorisée...
ensuite :
 
include ($var[$variable]);

n°1042298
cerel
Posté le 10-04-2005 à 20:04:46  profilanswer
 

Personellement j'ai stocke dans ma base les pages php que j'utilise.
Donc les parametres que je passe dans l'url c'est "l'id" de la page.
Donc la, pas besoin de rajouter du code, suffit de rajouter la page dans la bonne table et c'est bon.

n°1042299
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 20:05:53  profilanswer
 

tu parle pour la bdd shriko?
ça je te dis j'en ai trop la flemme. tu m'imagine reprendre mes 160 pages pour les indexer dans un fichier avec des tableaux?  :(
 
edit:
 
vous voulez pas me donner un exemple de code plus complet et parlant je pige pas bien là heinggg.  :??:  
des pages dans un bdd j'ai jamais vu ça moi.  :heink:


Message édité par pmusa le 10-04-2005 à 20:07:57
n°1042301
shrito
Posté le 10-04-2005 à 20:07:13  profilanswer
 

ui je parle pour la BDD...
 
tu sait meme avec 160 pages c'est simple, il suffit de faire une boucle while pour crée la BDD.. en fait tu demande a ta fonctin de lire tt les fichier d un repertoire et de les enredistré dans la BDD...

n°1042304
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 20:09:27  profilanswer
 

shrito a écrit :

ui je parle pour la BDD...
 
tu sait meme avec 160 pages c'est simple, il suffit de faire une boucle while pour crée la BDD.. en fait tu demande a ta fonctin de lire tt les fichier d un repertoire et de les enredistré dans la BDD...


ouè c'est puissant ça.  :sol:  
concrètement ça donne quoi avec du code siouplé.

n°1042305
shrito
Posté le 10-04-2005 à 20:09:43  profilanswer
 

$handle=opendir("le_repertoire" );
 
while ($tmp = readdir($handle))
{
if($tmp!="." && $tmp!=".." )
{
$temp=explode(".", $tmp);
$var[$temp[0]]=$tmp;
}
}
 
et la tu as un truc du style
 
$var[page1]="page1.php"
$var[page2]="page2.php"
$var[page3]="page3.php"
$var[page4]="page4.php"
...
...
 
a toi de virer les fichier indésirable apres..

n°1042306
kalex
Posté le 10-04-2005 à 20:12:41  profilanswer
 

Attention une bdd ça stoque... des données ! Et JAMAIS de code php.
 
edit : En fait, je parlais de mettre le contenu de ses pages dans une base de données avec un id et tout, et non de créer un index comme tu le proposes shrito.


Message édité par kalex le 10-04-2005 à 20:16:01
n°1042309
pmusa
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
Posté le 10-04-2005 à 20:15:30  profilanswer
 

ouhhhh chu largué là.  :pfff:
'comprend pô les mecs.
 
ça va m'obliger à faire plein de modifs dans mes leins ça en plus non?  [:aloy]

n°1042310
shrito
Posté le 10-04-2005 à 20:15:40  profilanswer
 

kalex a écrit :

Attention une bdd ça stoque... des données ! Et JAMAIS de code php.


on par le pas de BDD SQL la... c'est un peu stupide d utiliser du SQL pour ce genre de chose.
 
en fait une fois que tu a crée $var
 
tu fais $var=serialize($var); // qui permet d enregistrer un tableau dans un fichier
et tu l enregistre dans un fichier que tu chargera ensuite dans tes pages...
 
utiliser SQL sert a rien ici si ce n est a consommer des ressource inutilement
 
PS : aucune modif a faire ;)
PS2: Ah ok Kadex ;)


Message édité par shrito le 10-04-2005 à 20:16:46
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Faille dans script

 

Sujets relatifs
Question niveau performances du scriptScript VBS ajouter un compte administrateurs
Impossible d'utiliser include() dans un script de génération d'image.Inclusion script JS != code directement dans le source ?
Supports Lotus Script[Resolu] Asp/Java script pb de variable
problème script connexion easyphp 1.8problème script connexion easyphp 1.8
Probleme de socket dans petit script sftp Perlfaille de sécurité dans mon script PhpWebGallery
Plus de sujets relatifs à : Faille dans script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR