| Index de l'article |
|---|
| Protection contre le SQL Injection |
| Présentation du problème |
| Les variables qui contiennent des chaînes |
| La sécurité |
| Explication |
| Les variables numériques |
| Toutes les pages |
Variables numériques:
Ce type d'injection est moins connue que la précédente, ce qui en fait plus fréquentes, et il commence comme tout à l'heure avec un exemple. Cette fois, c'est affichage de l'âge d'un membre en fonction de son id, et en le faisant passer par un formulaire ($ _POST) à changer:
$ id = $ _POST [ 'id'];
$ requete = mysql_query ( "SELECT age FROM membres WHERE id = $ id");
exploitation :
1 |
1 UNION DE passe Sélectionnez membres WHERE id = 1
|
Cette injection fait exactement la même que la précédente, sauf qu'ici, pour l'éviter, il y a deux solutions:
- Changer le contenu de la variable si elle contient uniquement des chiffres
- Vérifiez si la variable contient en réalité un certain nombre avant de l'utiliser dans une requête.
Méthode 1:
Nous allons utiliser une fonction intval () Cette fonction retourne quel que soit le contenu d'une variable sa valeur numérique. Par exemple:
1 |
e10 variable = '1 '; / / $ variable vaut '1 e10' |
1 |
$ id = intval ($ _POST [ 'id']); |
Cela signifie que vous pouvez y passer est plus que suffisante, mais je vous recommande decontinuer à trouver une autre méthode, ou si vous avez l'air bête si vous trouvez cetteméthode sur un code qui n'est pas le vôtre sans le comprendre.
Méthode 2 :
Ici, nous utilisons une fonction qui renvoie TRUE si une variable ne contient quenombres et FALSE si elle n'est pas le cas cette fonction is_numeric (),nous allons l'utiliser dans une condition qui vérifie si la fonction is_numeric () retourne TRUE bien
$ id = $ _POST [ 'id'];
if (is_numeric ($ id))
(
$ requete = mysql_query ( "SELECT age FROM membres WHERE id = $ id");
)
autre
(
echo "Essayer de me hack ?";
Quelle est la meilleure, en fonction entre intval () et is_numeric () ?
Les deux sont tout aussi efficaces, mais je conseil inval () car avec la fonction is_numeric () écrire plus de code, et si la variable ne contient pas seulement des chiffres, la demande est annulée (en principe, mais bien sûr vous pouvez exécuter la même requête en choisissant une Valeur par défaut de la variable utilisée). Well that's it!
Vous savez tout pour sécuriser vos applications.
Si vous appliquez ces méthodes, il y a absolument aucun risque d'avoir un type de faille d'injection SQL sur son site web (ou PHP).
| Suivant > |
|---|




