1. Introduction à la fonction is_numberic
La fonction is_numberic est utilisée dans certains programmes CMS nationaux. Examinons d'abord la structure de cette fonction
bool is_numeric (mixed $var)
If renvoie VRAI si var est un nombre ou une chaîne numérique, sinon renvoie FAUX.
2. La fonction est-elle sûre ?
Regardons ensuite un exemple pour illustrer si cette fonction est sûre.
$s = is_numeric($_GET['s'] )?$ _GET['s']:0;
$sql="insérer dans test(type)values($s);" //Ce sont des valeurs($s), pas des valeurs('$s' )
mysql_query ($sql);
Le programme de fragment ci-dessus sert à déterminer si le paramètre s est un nombre. Si c'est le cas, il renverra un nombre, sinon, il renverra 0, et. il sera ensuite introduit dans la base de données pour interrogation. (De cette façon, l'instruction SQL ne peut pas être construite)
Nous convertissons '1 ou 1' en hexadécimal 0x31206f722031 comme valeur du paramètre s
Une fois le programme exécuté, nous interrogeons la base de données, comme indiqué ci-dessous :
Si vous réinterrogez les champs de cette table et introduisez une autre instruction SQL sans filtrage, cela provoquera deux injections.
RésuméEssayez. Pour ne pas utiliser cette fonction, si vous souhaitez utiliser cette fonction, il est recommandé d'utiliser des instructions SQL standard et d'ajouter des guillemets simples aux conditions, afin que le nombre hexadécimal 0x31206f722031 soit affiché dans la base de données. Il n’y en aura pas 1 ou 1.