9
votes

Protection par injection SQL - Cast de la chaîne à int

Nous savons tous que SQL paramétralisée est la voie à suivre lors de la gestion de l'entrée de l'utilisateur et de la dynamique SQL, mais est en train de jeter de la chaîne à int (ou double ou long, ou autre) comme efficace si l'entrée que vous recherchez est numérique. ?

Je suppose que ce que je demande, c'est si cette technique est infaillible en ce qui concerne l'injection SQL?


0 commentaires

4 Réponses :


1
votes

Son coffre-fort en ce qui concerne la prévention des injection SQL, mais pas vraiment une bonne idée car vous obtenez une exception, que vous souhaitez toujours éviter si possible, car les exceptions sont chères. Vous devez vraiment désinfecter correctement l'entrée. Et bien sûr, l'utilisateur peut toujours modifier la valeur à n'importe quelle plage de la valeur INT32.


0 commentaires

10
votes

Je ne suis pas un expert, mais je suis raisonnablement sûr que cela serait en sécurité.

Mais pourquoi prenez la chance? Utilisez SQL paraméturé et vous n'avez jamais besoin de vous en soucier.

En outre, le paramétrage de votre SQL présente d'autres avantages, pas seulement une protection contre l'injection.


0 commentaires

2
votes

Si la chaîne était un numéro valide avant de la jeter en Integer Oui, c'est sûr. Mais vous devez vous assurer qu'il s'agit d'un entier valide avant de la jeter à INT.

Je ne sais pas quelle langue du serveur que vous utilisez, mais dans PHP, vous pouvez utiliser une fonction IS_Numeric (). Par exemple: xxx


1 commentaires

Mec, pourquoi utilisez-vous la constante à la vie gauche?



1
votes

probablement , mais de tester.

En ce qui concerne la réponse de Richard, j'ai parfois eu des problèmes avec Isnumeric () étant un peu plus libéral dans ce qu'elle acceptera comme un nombre valide que la distribution réelle à numérique (dépend des paramètres de localisation, réellement). Des trucs comme "-0", "3e-5", "5.000.000" satisfait parfois isnumérique, mais ne se couche pas correctement. Donc, je fais habituellement un essai complet, attrapez plutôt la déclaration réelle.


1 commentaires

Ouais c'est pourquoi j'utilise aussi IS_INT () après la mise en oeuvre pour vous assurer.