- Template E-commerce (6)
- Template Joomla (52)
- Template Musique (3)
- Template Internet (10)
- Template Divers (16)
- Template Sport (2)
- Template Communication (7)
- Template Arttistique (13)
- Template Designer (13)
- Template XHTML/CSS (27)
- Template Flash (19)
- Template Entreprise (8)
- Template Jeux (17)
- Template WordPress (50)
- Les plus télécharger (231)
- Autres Templates (244)
Protéger votre site contre les SQL INJECTION
1- Types d’exploitation :
Si votre site web contient une variable qui permet d’afficher le contenu stocké dans une base de données MySQL, comme dans l’exemple suivant:
Ou bien si votre site web contient un système d’authentification (Login / Mot de passe), dans ces deux cas vous êtes devant un menace d’être attaqué par injection SQL
Pour l’affronter il faut vérifier la valeur de cette variable et d’utiliser des méthodes de protection.
Généralement une attaque consiste à ajouter des commandes propres à la base de donnée à l’intérieur de la valeur (ce qu’on appel une « injection ») qui est utilisée de façon à transférer le fonctionnement de la commande SQL de sa tâche originale. Par exemple, une variable qui devrait contenir un simple chiffre qui identifie le numéro d’enregistrement dans la base de données pourrait contenir en plus une fonction additionnelle qui efface complètement la table.
2- Méthodes pour contrer ces exploits :
Dans le cas de notre premier exemple, on s’attend évidemment à ce que la valeur soit un chiffre sans plus, nous allons donc vérifier si c’est le cas (a travers une expression rationnelle), avant même de consulter la base de donnée MySQL avec une opération SELECT:
Si la valeur n’existe pas, ou si la valeur ne correspond pas à un chiffre, au début et à la fin (indiqué par les symboles ^ et $), on sort du programme pour afficher un message d’erreur.
On peut ensuite utiliser la variable en toute sécurité dans notre requête mysql:
Un autre exemple, cette fois, avec un paramètre littéral en majuscule:
Donc:
Si la valeur ne correspond pas à un mot tout en majuscule, sans espace ou autre caractère non permis, on sort du programme et on affiche toujours un message d’erreur.
Dans les cas où on accepte des valeurs inscrites a travers un formulaire comme dans l’authentification (login / mot de passe), toutefois on devrait au moins se protéger contre l’emploi des caractères propres à MySQL qui sont souvent utilisés dans le cas d’attaque par injection, comme NULL, \x1a, \n, \r, \, ‘, » et \x00.
Dans ce cas, on recommande l’utilisation de la fonction PHP mysql_real_escape_string() sur ces variables avant des les utiliser dans une requête auprès de la base de donnée.
Exemple:
Cette fonction échappe les caractères conflictuels avec une barre d’échappement \ afin de considérer leur valeur littérale plutôt que leur valeur comme caractère d’opération MySQL. Cette commande doit par contre être appelée après qu’une connexion MySQL ait été établie.
Il faut aussi s’assurer que PHP ne fonctionne pas en mode « Register Globals » ,et que la valeur des variables soient toujours acquise selon le procédé prévu, comme suit:
Pour les formulaires :
Pour les liens href :















