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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Include ? Un peu peur de la faille

n°1442595
Djebel1
Nul professionnel
Posté le 14-09-2006 à 17:09:33  profilanswer
 

Reprise du message précédent :


olol comme tu te prends la tête pour rien  [:bap2703]  
Ton histoire de md5, non seulement c'est inutile, mais en plus ça va nuire au référencement de tes pages. Bah oui, je te rappelle que les adresses de tes pages, c'est plus mieux si elles sont explicites, et en rapport avec la page.

mood
Publicité
Posté le 14-09-2006 à 17:09:33  profilanswer
 

n°1442621
supermofo
Hello World !
Posté le 14-09-2006 à 17:47:20  profilanswer
 

Tant que tu sais exactement à quoi t'attendre au niveau des paramètres, c ok.
 La meilleure méthode sera la plus rapide. Au niveau rapidité (j'ai pas fais les
test),
j'imagine qu'une comparaison d'entier est plus rapide qu'une comparaison
alphanumérique.
De meme que la comparaison alphanumérique (ctype_alnum) devrait etre plus rapide
qu'un regexp.
 
Perso j'ai le plus confiance dans la comparaison numérique ( 13 == 13 ? ).
 
Niveau fiabilité certains utilisateurs de php.net montre par l'exemple qu'une
comparaison:
 
Citation:

Code :
  1. One thing to note in comparison with ==
  2. When we make a comparison with == php automaticly converts strings to integers
  3. when either side of the comparison is an integer, f.e.:
  4. <?
  5. $value = 0;
  6. if($value == "submit" ) {
  7.    echo "Let's submit";
  8. }
  9. ?>
  10. Above would be succesful, since "submit" is converted to an integer (eq 0) and
  11. the equation is would return true; (that's why (1 == "1submit" ) would also
  12. return true)
  13. That's why we should use strcmp or === (checks type also), for string
  14. comparisons.
  15. So my conclusion is that when comparing string, you'd better not make use of ==
  16. (use strmp or === instead). For integer comparisons the == equation can be
  17. usefull, since our values will always be casted to an integer (1 == "1" returns
  18. true).


 
Il est clair que le hash rend un peu "gore" dans une url.  La dessus on est d'accord.  
Mais alors pourquoi l'utiliser ? La réponse est simple : rendre la tache plus difficile à un hacker.
 
Je m'explique en voyant une url du type url?page="mot.php", on voit immédiatement que l'include est utilisé.
De plus si le filtrage est mal fait, la porte "peut s'ouvrir".
 
Avec une page du type url?page="5", on peut penser qu'il s'agit soit d'une page generee en SQL, soit d'un tableau et dans tous cas une variable récupère cette valeur. Ici page.
Conclusion on identifie une variable du script sans avoir le script sous les yeux. Si globals est ON on casse rapidement ce script.
 
Avec une page url?page="mot"&id="5". Cette fois est mal vu du coté des robots.
 
Par contre avec url/".mot."/".id."/ et un rewrite qui ne recupere que le "id". On gagne:
- une url unique dans tous les cas
- le mot est toujours visible pour les bots
- le filtrage est doublé puisque nous profitons du filtrage url rewriting ET de celui PHP
- on obtient une url qui "cache" cette faille potentielle et qui peut éviter  
des problèmes  ( Pour l'effort , je pense que cela vaut le cout )
 
Pour répondre à djebel je dirais que la différence entre :
 
-http://www.domaine.com/page/id/
et
-http://www.domaine.com/page/
est si elle existe (?) infime .

Message cité 2 fois
Message édité par supermofo le 14-09-2006 à 17:51:53
n°1442632
KrisCool
“Verbeux„
Posté le 14-09-2006 à 18:03:58  profilanswer
 

supermofo a écrit :

Tant que tu sais exactement à quoi t'attendre au niveau des paramètres, c ok.
 La meilleure méthode sera la plus rapide. Au niveau rapidité (j'ai pas fais les
test),
j'imagine qu'une comparaison d'entier est plus rapide qu'une comparaison
alphanumérique.
De meme que la comparaison alphanumérique (ctype_alnum) devrait etre plus rapide
qu'un regexp.


 
Pardonne le caractère cru de mon langage, mais c'est du branlage de mouches.
 
 

Citation :

Il est clair que le hash rend un peu "gore" dans une url.  La dessus on est d'accord.  
Mais alors pourquoi l'utiliser ? La réponse est simple : rendre la tache plus difficile à un hacker.


 
L'obfuscation n'est pas une méthode fiable en matière de sécurité. Les exemples sont légion.
 

Citation :

Je m'explique en voyant une url du type url?page="motSEO", on voit immédiatement que l'include est utilisé.


Non.
 

Citation :

De plus si le filtrage est mal fait, la porte "peut s'ouvrir".


L'important est donc de bien faire le filtrage, pas de passer du temps à masquer un filtrage mal fait. D'autant qu'un filtrage efficace est relativement simple à mettre en oeuvre.
 
 

Citation :

Avec une page du type url?page="5", on peut penser qu'il s'agit soit d'une page generee en SQL, soit d'un tableau et dans tous cas une variable récupère cette valeur. Ici page.


Tiré par les cheveux. De toute façon la majorité des paramètres passés à une page sont utilisés dans des requêtes de base de données. Donc sans grand intérêt.
 

Citation :

Conclusion on identifie une variable du script sans avoir le script sous les yeux. Si globals est ON on casse rapidement ce script.


"register_globals ON" est une des pires idées qu'on puisse avoir d'un point de vue sécurité. C'est même pas la peine de parler de sécuriser une application PHP avec register_globals activé.  
 
Le coeur de la sécurité en PHP (et en développement web) ce sont les points d'entrée de l'application. Par point d'entrée on entend les paramètres des URLs de l'application. Tout ce qui permet d'envoyer des données à l'application. Une application sécurisée se caractérise en premier lieu par:
- un minimum de points d'entrée (le strict nécessaire)
- une validation systématique des données passant par les points d'entrée
(la sécurité d'une application se mesure aussi à l'aune de sa robustesse et des informations qu'elle donne en sortie, mais c'est hors de propos ici)
 
Si les paramètres d'une page sont systématiquement vérifiés, l'intérêt pour l'attaquant de les connaître - voire de connaître leur utilité - est nul. C'est le but vers lequel tendre.
 

Citation :

Avec une page url?page="mot"&id="5". Cette fois est mal vu du coté des robots.


Certes.
 

Citation :

Par contre avec url/".mot."/".id."/ et un rewrite qui ne recupere que le "id". On gagne:
- une url unique dans tous les cas
- le mot est toujours visible pour les bots
- le filtrage est doublé puisque nous profitons du filtrage url rewriting ET de celui PHP
- on obtient une url qui "cache" cette faille potentielle et qui peut éviter  
des problèmes  ( Pour l'effort , je pense que cela vaut le cout )


D'accord pour les 3 premiers points, aucune différence pour moi sur les points suivants. En général quand il y a des chiffres dans une URL style http://mon.site.fr/12/5/ c'est rarement des noms de répertoire. Faire l'hypothèse de valeurs stockées dans des variables est pas déplacé.
 
Le fait que ça cache le nom des variables est pas une mauvaise chose en soi, mais la sécurité d'un script ne devrait pas reposer sur ce paramètre. Jamais.
 
L'obfuscation est quelque chose que je considère personnellement comme une perte de temps. Le plus important, c'est de se demander ce qui est important à un attaquant potentiel. Le nom des variables n'est pas important, par contre la version de php si par exemple. Faire ce tri là est important.
 
Par ailleurs, il est préférable de passer du temps à blinder ses pages qu'à obfusquer les manquements potentiels à la sécurité. C'est une bien meilleure façon de sécuriser ses scripts et d'éviter un faux sentiment de sécurité.


---------------
Loose Change Lies | Bars | Last.fm
n°1442635
zapan666
Tout est relatif
Posté le 14-09-2006 à 18:10:51  profilanswer
 

supermofo a écrit :


Je m'explique en voyant une url du type url?page="mot.php", on voit immédiatement que l'include est utilisé.
De plus si le filtrage est mal fait, la porte "peut s'ouvrir".


Code :
  1. switch ($page) {
  2. 'kekete':
  3. include('ma_page_a_mois.php');
  4. break;
  5. }


et op, tu vois plus l'include.
 
forcement, si tu fais  
 

Code :
  1. include($_GET['page']);


On connait l'include, et tu peux tout faire peter


---------------
my flick r - Just Tab it !
n°1442652
supermofo
Hello World !
Posté le 14-09-2006 à 18:45:12  profilanswer
 

On est bien d'accord krisscool que je n'aborde pas le filtrage d'input.
Mon premier post avait pour simple objectif de présenter une méthode, fiable.
De plus je ne peux pas écrire un roman, et étudier toutes les possiblités de failles pour chaque affirmations postées.
 
J'ai déliberement choisi de présenter une méthode qui je trouve est bonne.
 
J'arrete la !

n°1442656
Djebel1
Nul professionnel
Posté le 14-09-2006 à 18:56:46  profilanswer
 

On a délibérément choisi de te montrer que la méthode de ton premier post est inutile, présente des désavantages, et n'améliore pas la sécurité d'une appli correctement conçue :)
Donc avant de faire du méli-mélo, autant concevoir l'appli correctement ça sera plus simple.
 
Je plussoie sur toute la ligne le post de kriscool. J'ajouterais que l'obfuscation n'est non seulement pas une méthode fiable de sécurité, mais qu'en général ça n'obfusque que le développeur qui vient après toi.

n°1443135
omega2
Posté le 15-09-2006 à 15:53:58  profilanswer
 

supermofo :
entre :
http://mon.site.fr/12/5/
http://mon.site.fr/forum/5/
http://mon.site.fr/index.php?page= [...] ection=php
http://mon.site.fr/index.php?page= [...] n=md5(php)
 
Qu'elle est l'url présentant le plus de risque? En fait, aucune n'est plus sécurisé que les autres.
Pour la premiére, il suffit de changer un nombre pour changer de section (facile de repérer lequel si le site présente plusieurs adresses au visiteur)
La seconde est pareil que la premiére à part que ca demande de trouver le bon mot. (augmentation de la sécurité trés trés trés trés faible au final)
La troisiéme est aussi peu sécurisé que la seconde.
Quand à la derniére, c'est simple, un code md5 à une structure vraiment trés simple à repérer. Il suffit donc d'utiliser un petit programme de rien du tout et de tenter le md5 correspondant à des mots clés (comme "admin" ) pour passer outre cette obuscation.
 
 
Au final ce qu'il y a à retenir? L'obfuscation par hachage de mot, remplacement de mot ou url rewriting ne changera strictement rien à la sécurité d'un site basé sur un include (dans tous les cas, on sait quoi changer dans l'adresse rien qu'en regardant 3-4 pages du site) D'un point de vue sécurisation, ca n'est que de la poudre aux yeux destiné à berner ce qui n'y conaissent rien en sécurité informatique.
La véritable sécurité, c'est du côté du code php/asp/jsp/autre que ca se passe.


Message édité par omega2 le 15-09-2006 à 15:55:09
n°1443221
supermofo
Hello World !
Posté le 15-09-2006 à 18:48:48  profilanswer
 

Oui oui mais je crois que personne n'a lu le morceau de code suivant. de mon 1er post.
 

Code :
  1. //filtrage 1
  2. RewriteRule ^([a-z0-9]{32})/mapage\.html$ index.php?supermofo=1 [L]
  3. //filtrage 2  
  4. $page = ctype_alnum($_GET['supermofo']) ? ctype_alnum($_GET['supermofo']): "erreur";
  5. //filtrage 3
  6. if(!isset($mon_putin_de_tablo[$_GET['supermofo'])) die('erreur');


 
Apres on me dit que le md5 sert à rien. J suis desolé mais tu pourras pas injecter des admins ou autre puisque:

Code :
  1. $hash = time() . $nom_de_la_page ;


 
Ensuite on me sort la LECON sur la sécurité. Je pense m'adresser à un public suffisamment connaisseur pour savoir les bases ( INPUT omg ! ).
 
Essayer de lire les posts avant d'assassiner les gens.
 
Vas me trouver un moyen de contourner ce filtrage <<<<D INPUT>>>> !!

Message cité 2 fois
Message édité par supermofo le 15-09-2006 à 18:51:11
n°1443229
zapan666
Tout est relatif
Posté le 15-09-2006 à 19:05:01  profilanswer
 

supermofo a écrit :


Apres on me dit que le md5 sert à rien. J suis desolé mais tu pourras pas injecter des admins ou autre puisque:

Code :
  1. $hash = time() . $nom_de_la_page ;




 [:autobot] de quoi qui parle ?
 


---------------
my flick r - Just Tab it !
n°1443231
KrisCool
“Verbeux„
Posté le 15-09-2006 à 19:12:40  profilanswer
 

supermofo a écrit :

Apres on me dit que le md5 sert à rien. J suis desolé mais tu pourras pas injecter des admins ou autre puisque:

Code :
  1. $hash = time() . $nom_de_la_page ;



 
[:tartragnan]


---------------
Loose Change Lies | Bars | Last.fm
mood
Publicité
Posté le 15-09-2006 à 19:12:40  profilanswer
 

n°1443239
Djebel1
Nul professionnel
Posté le 15-09-2006 à 19:33:28  profilanswer
 

ça apporte rien de plus niveau sécu tes méthodes, ça rend juste le tout plus prise de tête.

n°1443750
leflos5
On est ou on est pas :)
Posté le 17-09-2006 à 20:35:45  profilanswer
 

Djebel1 a écrit :

ça apporte rien de plus niveau sécu tes méthodes, ça rend juste le tout plus prise de tête.


Si le développeur qui a le code comprend rien, le hacker sans le code y comprendra encore moins  :D

n°1443757
KrisCool
“Verbeux„
Posté le 17-09-2006 à 20:48:53  profilanswer
 

leflos5 a écrit :

Si le développeur qui a le code comprend rien, le hacker sans le code y comprendra encore moins  :D


 
En même temps la vraie sécurité c'est quand le hacker comprend qu'il peut pas contourner la protection.


---------------
Loose Change Lies | Bars | Last.fm
n°1443761
leflos5
On est ou on est pas :)
Posté le 17-09-2006 à 20:59:04  profilanswer
 

KrisCool a écrit :

En même temps la vraie sécurité c'est quand le hacker comprend qu'il peut pas contourner la protection.


Un hacker contourne tout s'il le veut  :na: La seule solution de pas se faire hacker c'est de rien faire  :whistle:

n°1443765
KrisCool
“Verbeux„
Posté le 17-09-2006 à 21:13:39  profilanswer
 

leflos5 a écrit :

Un hacker contourne tout s'il le veut  :na:


 
Fondamentalement oui, s'il a des ressources illimitées. Sauf que dépenser plusieurs millions d'euros et passer des semaines pour pirater le site de la Pizzeria San Maria, c'est pas tout à fait réaliste [:petrus75]

Message cité 1 fois
Message édité par KrisCool le 17-09-2006 à 21:14:31

---------------
Loose Change Lies | Bars | Last.fm
n°1443782
leflos5
On est ou on est pas :)
Posté le 17-09-2006 à 21:56:57  profilanswer
 

KrisCool a écrit :

Fondamentalement oui, s'il a des ressources illimitées. Sauf que dépenser plusieurs millions d'euros et passer des semaines pour pirater le site de la Pizzeria San Maria, c'est pas tout à fait réaliste [:petrus75]


Celle là  :ouch:  
 
:d
 
Certes, c'était juste pour le principe  :o  
 
[HS]
La pizzeria San Maria utilise php pour présenter son adresse et sa liste de pizza à prix fixe :heink:  
[/HS]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
De l'aide sur la fonction "Include", s'il vous plait![php] perte de connexion dans un include [resolu]
Cannot open Include file: erreur basique mais pbUn tableau en Css/xhtml dans une include....
include, parametre, deux serveursinclude et menu
z-index includepage en include non accessible
[PHP] Problème d'includeAdministration: probleme Session & Include
Plus de sujets relatifs à : Include ? Un peu peur de la faille


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)