Les attaques par injection SQL sont causées par des imperfections dans nos instructions de programme. Voyons comment utiliser la fonction instr dans asp pour empêcher efficacement les attaques par injection SQL. La chose spécifique devrait être comme ça.
Si instr(Request(id), )>0 ou instr(Request(id),')>0 alors réponse.redirect index.htm
Bien sûr, vous pouvez aussi écrire ce que vous voulez après !
Apprenons d'abord la fonction instr :
grammaire
InStr([début, ]string1, string2[, comparer])
La syntaxe de la fonction InStr a les paramètres suivants :
Description des paramètres
le démarrage est facultatif. Expression numérique qui définit la position de départ de chaque recherche. En cas d'omission, la recherche commencera à la première position du caractère. Si start contient Null, une erreur se produit. Si compare est spécifié, le paramètre start est obligatoire.
String1 est requis. Accepte une expression de chaîne à rechercher.
Chaîne2
Requis. L'expression de chaîne à rechercher.
La comparaison est facultative. Une valeur numérique indiquant le type de comparaison utilisé lors de l'évaluation des sous-chaînes. Voir la section Paramètres pour les valeurs numériques. En cas d'omission, une comparaison binaire sera effectuée.
Le paramètre compare peut avoir les valeurs suivantes :
Description de la valeur constante
vbBinaryCompare 0 Effectue une comparaison binaire.
vbTextCompare 1 Effectue une comparaison de texte.
[valeur de retour]
La fonction InStr renvoie les valeurs suivantes :
Si InStr renvoie
string1 est de longueur nulle 0
string1 est nul
string2 est un début de longueur nulle
string2 est nul
chaîne2 introuvable 0
Rechercher string2 dans string1 Trouver la position de la chaîne correspondante
début > Len(string2) 0
L'exemple suivant utilise la chaîne de recherche InStr :
Dim SearchString, SearchChar, MyPos
SearchString =XXpXXpXXPXXP ' La chaîne à rechercher.
SearchChar = P 'Recherche P.
MyPos = Instr(4, SearchString, SearchChar, 1) 'La comparaison de texte renvoie 6 à partir du quatrième caractère.
MyPos = Instr(1, SearchString, SearchChar, 0) 'La comparaison binaire renvoie 9 à partir du 1er caractère.
MyPos = Instr(SearchString, SearchChar) 'Retour 9.
' Par défaut, comparaison binaire (dernier argument omis).
MyPos = Instr(1, SearchString, W) 'La comparaison binaire renvoie 0 à partir du caractère 1 (W introuvable).
Notez que la fonction InStrB utilise les données d'octet contenues dans la chaîne, donc InStrB ne renvoie pas la position du caractère de la première occurrence d'une chaîne dans une autre chaîne, mais la position de l'octet.
Résumé : La fonction de instr est : Renvoie la position de la première occurrence d'un caractère ou d'une chaîne dans une autre chaîne. Eh bien, regardons quel code :
si instr(Request(id), )>0 ou instr(Request(id),')>0 alors
Signification : Comparez les positions spécifiques des caractères (espace) et des caractères (') dans la requête (id) (comparaison binaire si les caractères (espace) et (') sont trouvés, alors c'est l'instruction qui suit alors !
Maintenant, tout le monde comprend le sens !
Quand je l'ai vu pour la première fois, je me suis dit : et si c'était en asp ? N'est-ce pas une erreur de se tromper en ajoutant des caractères (; ou,) et d'autres caractères à Id=90 ? (Oui, la réponse est oui :)
Peut-être que quelqu'un d'autre a dit, alors j'ajouterai quelques caractères dans l'instruction if instr(Request(id), )>0 ou instr(Request(id),')>0 then, par exemple, changez-la en : if instr(Request (id ), )>0 ou instr(Request(id),')>0 ou instr(Request(id),;)>0 ou instr(Request(id),, )>0 alors
Attendez, vous pourrez l'ajouter plus tard, haha ! (C'est bien ! Mais c'est pire :)
Oui, après avoir ajouté cela, il peut effectivement vaincre certains soi-disant hackers !
En fait, ce n'est pas nécessaire. Avez-vous oublié la phrase instr(Request(id), )>0 Il l'a même comparée à (espace) ! Tant qu'il y a cette phrase, ne serait-il pas inutile pour ces soi-disant hackers de dire, et 1 = 1 ?