Je me suis fait hacker mon site, comment éviter les failles sur mon site?
Je crée un site web, et j'aimerais avoir quelques conseils pour ne pas me faire hacker
Justement, dans ce tutoriel, nous allons voir comment réduire les failles de votre site web
Ce tutoriel n'a pas pour but de rendre votre site "infaillible",mais sert juste à limiter les dégâts. Bien sûr, le fait de se faire hacker son site ne dépend pas QUE de votre code,mais d'autres paramètres,comme la version de votre serveur web, qui peut contenir des failles lui aussi
I- Quelques conseils en vrac
Lorsque vous concevez un site web, vous devez toujours garder ceci à l'esprit:
Un hacker peut toujours avoir accès au code source de la page, et peut même le modifier à sa guise.
Qu'est-ce que cela veut dire?
Et bien, ça veut dire que si vous utilisez des champs de formulaire cachés pour transmettre des données, et bien ceux-ci seront visibles pour le hacker, qui pourra les manipuler comme il veut .
Autre exemple: Toutes les vérifications que vous faites via javascript (par exemple vérification d'e-mails) peuvent être contournées très facilement par le hacker (avec des outils comme Firebug par exemple).
Donc, vous devez TOUJOURS vérifier que les données rentrées sont bien ce qu'elles sont supposées être, ou le mieux est de le rendre inaccessible au hacker (par exemple en mettant les champs hidden dans une session à la place, ou en faisant les vérifications de la validité d'e-mail directement en PHP).
II- Injections SQL
Pour illustrer mes propos,je vais vous proposer une étude de cas.
Imaginons un système comme Twitter (c'est-à-dire la possibilité de poster des messages courts) mais faillible.
Nous pourrions avoir par exemple,pour le système de connexion: Code : php
mysql_query("INSERT INTO messages (id,mesg) VALUES ($id,'$msg')");
echo"Votre message a correctement été envoyé";
}
makeFooter();//ajoute le footer du site
}
?>
Et voici donc notre code (ce qui va nous intéresser pour le moment)
Mais elles sont où les failles? Y'en a pas!
Bah justement... si (sinon ce tuto n'existerait pas )
Tout d'abord,regardons cette ligne: Code : php
mysql_query("INSERT INTO messages (id,mesg) VALUES ($id,'$msg')");
Nous savons que la variable $id provient d'un champ hidden et que notre $msg provient,lui de notre textarea .
Or malheureusement pour nous, les champs "hidden", qui sont invisibles pour le commun des mortels, sont visibles pour les hackers.
Un hacker pourrait donc récupérer l'id user d'un utilisateur, et remplacer son "id" par celui de sa victime.Le code serait ainsi trompé et croirait que c'est la victime qui a envoyé le message (vu que l'id user est celui de la victime).
Certes parler à la place d'un autre peut être très amusant,mais les hackers préfèrent souvent s'attaquer au coeur du site.
Je vous le dis donc (le dites à personne,c'est un secret ) , il y a aussi une injection SQL de possible.
Ah bon? Où ça? Pourtant y'a les magic quotes activées!
Bah en fait, les magic quotes, contrairement à ce qu'on pourrait penser, ne sont pas magiques du tout, et ne font que rajouter des devant un ' ou un ".
Et vous n'avez pas remarqué que la variable $id étant numérique,elle était facilement candidate aux injections SQL?
En effet, si nous modifions notre champ hidden et que nous lui injectons ceci: Code : sql
autrement dit: nous insérons un message bidon , puis nous effaçons tous les messages! (et on pourrait faire bien d'autre chose)
La faille présentée ici n'est pas exploitable telle quelle n'est pas exploitable directement,étant donné que la fonction mysql_query() ne permet l'exécution QUE d'une seule requête à la fois (ainsi, l'utilisation du caractère ";" ne fonctionnera pas). Cependant, cela ne veut pas dire qu'il faut fermer les yeux sur cette faille,car on peut passer par d'autres moyens pour injecter du SQL!
Mais pourquoi avoir mis CHAR(65)?
Bah les magic quotes sont activées par défaut... Donc si j'avais mis "blabla" à la place, la chaîne aurait été transformée en "blabla" , faisant ainsi échouer l'injection
Mais comment se protéger?
Justement, nous y arrivons . Pour se protéger contre les injections SQL, bah il faut vérifier que ce qu'on reçoit correspond bien à ce qu'on est censé recevoir... (par exemple si on attend une variable numérique, bah il faut vérifier que ce qu'on reçoit soit bien un nombre ).
Bref: Il vaut mieux faire trop de vérifications que pas assez. Et ensuite, le mieux est de cacher les informations sensibles des yeux du hacker , dans des sessions par exemple
Ne stockez JAMAIS rien d'important dans les cookies, car les hackers peuvent très facilement les récupérer via des failles XSS (que nous aborderons dans la prochaine partie). De plus, les cookies, comme le reste, sont modifiables
III- Les failles XSS
Nous allons présenter un autre type de failles, peu connues aux yeux des développeurs, mais très dangereuses : en effet, grâce à une faille XSS,il est possible d'obtenir des droits administrateur, voire pire, de contrôler le navigateur web de l'utilisateur!
Les failles XSS (dites Cross Site Scripting) permettent de faire exécuter du code javascript arbitraire à une page web.
Prenons par exemple ce code:
[code=php][/code]
Pour résumer le tutoriel:
Pour vérifier la sécurité de son site, le mieux est encore de rentrer dans la peau du hacker, et d'essayer de trouver comment un hacker pourrait s'attaquer au site avec le code qu'on a écrit (personnellement j'ai adopté cette méthode qui fonctionne plûtot bien )
bas de la page
Pour le bon fonctionnement du site, il est conseillé d'utiliser Mozilla Firefox.