TourDeJeu, le réseau des jeux en ligne alternatifs : jeux web multijoueurs, jeux par forum. En savoir +

Flux RSS des discussions du forum : pour les joueurs, et pour les créateurs et MJ
Pages : (2) [1] 2   ( Aller vers premier message non lu ) Reply to this topicStart new topicStart Poll

> Important à Lire, Faille critique PHP
skyvador
  Ecrit le : Mardi 28 Décembre 2004 à 14h37
Quote Post


Pro
*

Groupe : Membre
Messages : 143


Bonjour à tous,

je vous conseil plus que VIVEMEMENT de lire l'article qui suis !!


--------------------
user posted image

user posted image
PMEmail PosterUsers WebsiteICQ
Top
Angelus
Ecrit le : Mardi 28 Décembre 2004 à 14h55
Quote Post


Ouf
*

Groupe : Membre
Messages : 216


Salut,

lol c'est pas vraiment une faille pour moi... c'est juste une erreur de débutant (ou utilisation de vieux scripts), et je ne pense pas que ce genre d'utilisation d'include se fait encore... suffit de réfléchir un peu quand on fait ses programmes. ^^


--------------------
PMEmail PosterUsers Website
Top
gorgu
Ecrit le : Mardi 28 Décembre 2004 à 15h04
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


angelius: t'es du genre qui aide si on a besoin de rien ?wink.gif

skyvador: merci pour cette info qui permettra a certains de sécuriser leurs scripts.

Cette faille en est une si votre serveur permets de remonter l'arborescence avec php. Le petit malin pourrait alors ouvrir n'importe quel fichier du serveur si il mets le bon chemin.

il est important de verifier ses scripts car beaucoup de scripts utiliseaient cela (phplinks entre autre et certains morceaux de vielles version de php-nuke)


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
Angelus
Ecrit le : Mardi 28 Décembre 2004 à 16h07
Quote Post


Ouf
*

Groupe : Membre
Messages : 216


QUOTE
angelius: t'es du genre qui aide si on a besoin de rien ?

Bah tiens c'est peut être pas faux tongue.gif mais on a toujours besoin d'aide de toute façon. innocent.gif

QUOTE
Le petit malin pourrait alors ouvrir n'importe quel fichier du serveur si il mets le bon chemin.


C'est vrai ça arrive souvent ce genre de chose, on se retrouve avec des fichiers hacker.txt qui te disent que tu as été piraté, mais ça c'est un gentil hacker qui prévient d'une faille... car on voit plus souvent une page qui remplace le site en entier. tongue.gif

Faut faire gaffe où on met ses passes de base de données, ftp et autres aussi... perso pour la bdd j'ai tout simplement dans un fichier que j'include à chaque fois pour ouvrir le mysql... c'est pas vraiment sécurisé je trouve si on a accès à n'importe quel fichier...


--------------------
PMEmail PosterUsers Website
Top
gorgu
Ecrit le : Mercredi 29 Décembre 2004 à 01h06
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


si l'on a la chance de pouvoir le faire, il faut inclure le fichier de configuration hors des fichiers atteignables par le web.

pas de www.toto.com/config.php

placez le plutot dans une racine innacessible et incluez le par "../biduleamoi.php"

cela permets de prévenir d'un gros hack si par malheur php venait à mourrir lors d'un redemarrage d'apache.( en gros un serveur où php ne marcherait pas)

si vous ne pouvez pas

placez le dans un repertoire au dessus style jesuispasla/biduleamoi.php

et placez un .htaccess qui interdisse le parcours du repertoire.

enfin, pour sécuriser mysql, il est deconseillé d'accepter les connexions qui ne viennent pas de localhost


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
khiguard
Ecrit le : Mercredi 29 Décembre 2004 à 01h19
Quote Post


Ouf
*

Groupe : Membre
Messages : 732


Je pensais que cette faille critique était déjà oubliée et plus employée depuis le temps (ca fait 2 ans je pense qu'elle à été trouvée).

Pour l'évitée il faut simplement mettre un nom dans la variable de page (ex : $p=forum).
Dans une fichier qu'on inclus on fera un switch de la variable page ou on fera un require('nom_de_la-page.php').
@+


--------------------
Alonya : Jeu de gestion/stratégie par partie.
Sombre Destin : Jeu de gestion/stratégie massivement multi joueur.
Antre du Cercle des Dragons Noirs: portail jdr | G-nerik: Système générique de jdr
PMEmail PosterUsers Website
Top
skyvador
Ecrit le : Mercredi 29 Décembre 2004 à 08h10
Quote Post


Pro
*

Groupe : Membre
Messages : 143


Je viens de voir que j ai un vieux php my links qui traine sur mon site principal, faut il mieux le virer par sécurité ?

Sinon quand on fait des includes qui ont directement le nom de la page à ajouté le problème est réglé ?


--------------------
user posted image

user posted image
PMEmail PosterUsers WebsiteICQ
Top
Michoko
Ecrit le : Mercredi 29 Décembre 2004 à 08h36
Quote Post


Kid
*

Groupe : Membre
Messages : 26


J'ai pas trop compris comment faire fasse au probleme crybaby.gif

Par exemple dans mon site j'ai un truc comme sa :

include('bannierehaut.php');

sa ca va pas ? huh.gif c'est dangereux ?

Que doit-je faire ?

Il faut que je mette le chemin dans une variable ?


--------------------
Michoko administrateur de :

user posted image
PMEmail PosterUsers Website
Top
gorgu
Ecrit le : Mercredi 29 Décembre 2004 à 09h04
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


non le tiens n'est pas dangereux:)

pour php my links: je penses que tu devrais au moins jeter un oeil oui.

pour programmer propre il ne faut PAS de include avec une variable tout simplement.
un switch est beaucoup plus propre


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
Michoko
Ecrit le : Mercredi 29 Décembre 2004 à 09h14
Quote Post


Kid
*

Groupe : Membre
Messages : 26


oki biggrin.gif ouf tu me rassure prie.gif

Merci thumbsup.gif


--------------------
Michoko administrateur de :

user posted image
PMEmail PosterUsers Website
Top
Belzoa
  Ecrit le : Jeudi 30 Décembre 2004 à 18h22
Quote Post


Unregistered






salut je viens ajouter mon grain de sel :

le include / require est beaucoup plus pratique que le switch mais il faut un minimum de sécurité : exemples :

1/ mettre toutes les pages a inclure dans un dossier ./inc (sous dossiers possibles bien entendu)

puis le code se présente ainsi : mapage.php?page=trucmuche

CODE

<?PHP

$page = $_GET['page'];     //on récupère la valeur de la variable page

/* on vire tous les points éventuellement présents dans la variable pour éviter les petits malins qui font : ?page=../accessprotege/pass.txt */

$page = ereg_replace('.','',$page);
$page = 'inc/'.$page.'.php';         //ensuite on rajoute l'extention

if(file_exists($page))     //on vérifie que la page demandée existe
{
 include($page);     //si oui on l'inclus
}
else
{
include(mapagederreur404.php);       //sinon on inclus la page d'erreur
}
?>


maintenant on reprend les mêmes et on recommence mais façon optimisée :

CODE

<?PHP

if(!include('inc/'.ereg_replace('.','',$_GET['page']).'.php')) include(mapagederreur404.php);

?>


c'est y pas beau ça ? (j'ai inventé ça directement sur ce forum, c'est donc non testé mais les seuls erreurs peuvent venir d'une faute de frappe, le principe lui est sur)
Top
gorgu
Ecrit le : Vendredi 31 Décembre 2004 à 04h16
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


c'est joli

je doute sur les temps de calculs.
fileexist + ereg + etc plus cours qu'un switch?

ensuite tu passe toujours le nom de fichier en variable et est limité à un include dans un repertoire.



--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
askywhale
Ecrit le : Vendredi 31 Décembre 2004 à 15h24
Quote Post


Pro
*

Groupe : Membre
Messages : 170


S'il y a une erreur (fichier pas trouvé) et que ton script affiche les warning (config php de la plpart des serveur mutalisé, outrepassable), tu va avoir une joli ligne "Warning blablabla ... blablabla". Faut mettre un @
Il faut que tu fasse un urldecode sur le résultat de $_GET
En virant les . t vire aussi le . de l'extension tongue.gif

Au final oui le switch en cas de dépendance variable c'est mieux. D'ailleurs le mieux s'est pas de dépendance variable du tout (comment vous faites avec les langage compilé ? hein ? hein ? ohmy.gif)


--------------------
PMEmail Poster
Top
gorgu
Ecrit le : Vendredi 31 Décembre 2004 à 15h29
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


avec les languages compilés t'as une memoire vive wink.gif


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
askywhale
Ecrit le : Vendredi 31 Décembre 2004 à 15h31
Quote Post


Pro
*

Groupe : Membre
Messages : 170


Et ça te permet de modifier les dépendances ça ? quel est le rapport ? blink.gif
La réponse était : avec des plugins


--------------------
PMEmail Poster
Top
zumba
Ecrit le : Vendredi 31 Décembre 2004 à 18h42
Quote Post


Ouf
*

Groupe : Membre
Messages : 496


A propos des includes dynamique, est ce possible de faire un include avec des paramètres, exemple :incude $script."?".$params;

bon cei dit je vois bien que c'est carrément déconseillé, aussi question n°2 : existe il en php un équivalent à l'objet ASP xmlhttp qui (contrairement à c que son nom laisse supposer) permet d'ouvrir dans le code tout script à partir de son url (avec params) et de récuperer le résultat dans une chaîne (méthodes open et send) ?

merci,


--------------------
Z
PMEmail Poster
Top
gorgu
Ecrit le : Vendredi 31 Décembre 2004 à 23h43
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


1) euh... pire cela veux rien dire et ne peux présenter aucun interet

2) oui mais là il est tard et je me rappel plus du nom (fopen ou un truc du style mais fopen je crois que c'est en local... mais ayant déjà fait cela pour recuperer les stats du seti je sais que cela existes...)


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
Angelus
Ecrit le : Samedi 01 Janvier 2005 à 19h45
Quote Post


Ouf
*

Groupe : Membre
Messages : 216


@ Zumba

2) Tu parles de la fonction file() ?
http://www.nexen.net/docs/php/annotee/function.file.php


--------------------
PMEmail PosterUsers Website
Top
zumba
Ecrit le : Dimanche 02 Janvier 2005 à 14h13
Quote Post


Ouf
*

Groupe : Membre
Messages : 496


euh je ne suis pas tout a fait sur,
j'ai parcoru l'aide que tu mets mais j'ai l'impression que file ou fopen( fopen j'en suis sur) ouvrent un fichier local ou distant et renvoient son contenu brut de décoffrage. Ca fort heureusement je sais le faire, mais moi je veux exécuter un php à distant et récuperer dans une chaine le résultat de l'exécution, la réponse http quoi (et le header, ca peut aider).

exemple de ce que je cherche à faire (avec passage de paramètres) :
CODE
zobi.php :
print "bonjour, ".$_REQUEST['param'];


pouet.php:
$result=la_fonction_que_je_cherche("www.mon-site.com/zobi.php?param=zumba");
print $result;


du coup l'exécution de pouet.php donnerait :
"bonjour, zumba"


voili voilo, merci les gens !


--------------------
Z
PMEmail Poster
Top
Haiken
Ecrit le : Dimanche 02 Janvier 2005 à 20h03
Quote Post


Ouf
*

Groupe : Membre
Messages : 360


fopen permet de faire ça "à la main" mais si tu veux un package tout fait tu peux regarder du côté de PEAR/HTTP Client ou PEAR/HTTP Request


--------------------
PMEmail Poster
Top
gorgu
Ecrit le : Lundi 03 Janvier 2005 à 12h22
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


http://fr.php.net/function.fopen

si tu cause un peu anglais, y a toutes les fonctions qui vont bien dans les commentaires


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
zumba
Ecrit le : Lundi 03 Janvier 2005 à 14h59
Quote Post


Ouf
*

Groupe : Membre
Messages : 496


Eh ben j'en bave,
ca fait un moment que je tourne la chose dans tous les sens avec fopen mais sans succes

manière directe : fopen("http://www.monsite.com/sousrep/zobi.php?param=zumba","r");
ca mouline qq secondes puis ca fait un die, mon pouet.php ne termine meme pas son exécution (et c'est trop court pour être un timeout à mon avis)

ensuite il y a la fonction proposée dans les manual-comments de php.net :
CODE
function getcontent($server, $port, $file)
{
  $cont = "";
  $ip = gethostbyname($server);
  $fp = fsockopen($ip, $port);
  if (!$fp)
  {
      return "Unknown";
  }
  else
  {
      $com = "GET $file HTTP/1.1\r\nAccept: */*\r\nAccept-Language: de-ch\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\nHost: $server:$port\r\nConnection: Keep-Alive\r\n\r\n";
      fputs($fp, $com);
      while (!feof($fp))
      {
          $cont .= fread($fp, 500);
      }
      fclose($fp);
      $cont = substr($cont, strpos($cont, "\r\n\r\n") + 4);
      return $cont;
  }
}


hélas elle me sort un Warning: fsockopen(): unable to connect to 212.27.XX.YY:80 in messageintendant.php , au fsockOpen() puis a l'affichage du contenu biensûr : "unknown". Le nom dns est visiblement bien traduit mais derrière ca ne passe pas, y a t'il une chance que ce soit du aux restrictions de sécurité de mon hébergement (online.fr) ? si non, une autre idée ?

quant aux packages, ca a l'air d'être exactement ce que je cherche mais hélas je n'ai pas la main sur les serveurs de mon hébergeur !


--------------------
Z
PMEmail Poster
Top
Haiken
Ecrit le : Lundi 03 Janvier 2005 à 15h25
Quote Post


Ouf
*

Groupe : Membre
Messages : 360


L'hébergeur peut désactiver cela avec la directive allow_url_fopen (utilise phpinfo() pour le savoir), mais plus généralement il a pu bloquer les connexions HTTP vers l'extérieur au niveau de son firewall...

Si c'est le cas, quelle que soit la solution utilisée, pas moyen de passer sweatdrop.gif


--------------------
PMEmail Poster
Top
zumba
Ecrit le : Lundi 03 Janvier 2005 à 15h57
Quote Post


Ouf
*

Groupe : Membre
Messages : 496


Y'a du mieux, mai sc'est pas encore ca !

le allow_url_fopen est bien à ON

QUOTE
mais plus généralement il a pu bloquer les connexions HTTP vers l'extérieur au niveau de son firewall...

mmmh a la limite mon zobi.php et mon pouet.php sont sur le meme serveur.
donc j'essaye avec localhost au lieu de www.monsite.com.
et là au lieu de me jeter il me renvoie bien la réponse http mais c'est un not found...
pas moyen de retrouver l'url du fichier, grrrr....


--------------------
Z
PMEmail Poster
Top
Haiken
Ecrit le : Lundi 03 Janvier 2005 à 17h40
Quote Post


Ouf
*

Groupe : Membre
Messages : 360


Est-ce qu'ils sont aussi sur le même hébergement ? Dans ce cas il y a plus simple...

Sinon :

C'est normal qu'il ne trouve pas ton fichier :
En HTTP 1.1, l'entête 'Host' de la requête sert à préciser sur quelle domaine aller chercher le fichier (cela sert à avoir plusieurs domaines sur la même IP, chose impossible en HTTP/1.0), et il y a très peu de chances pour que localhost pointe vers ton domaine (c'est de la config serveur)

Tu peux essayer de le blouser en te connectant sur localhost (fonction fsockopen) mais en mettant le bon nom de domaine dans l'entête Host: mais je ne saurais t'assurer à 100% que ça marche innocent.gif


--------------------
PMEmail Poster
Top
« Sujets + anciens | Programmer | Sujets + récents »

Pages : (2) [1] 2  Reply to this topicStart new topicStart Poll