J'ai récemment hérité d'un site Web classique ASP avec une tonne d'instructions d'insertion SQL en ligne qui sont vulnérables aux attaques d'injection SQL. P>
Ces instructions d'insertion sont exécutées via l'objet de commande ADO. P>
définira la propriété préparée de l'objet de commande ADO sur true Assurez-vous que la requête est paramétrée avant exécution, atténuant ainsi le risque d'injection SQL? P>
5 Réponses :
Non, si vous construisez une chaîne SQL avec des valeurs que vous obtenez directement de "Extérieur", une "déclaration préparée" ne vous aidera pas.
A P>
sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'"
Ce que je suggérerais que vous fassiez, c'est écrire une fonction pour assainir la saisie de l'utilisateur, puis exécutez toutes les variables de la requête à travers cela. Quand j'ai écrit le mien, j'ai fait des choses comme:
La plupart des injection SQL vont essayer quelque chose comme si échappé des guillemets simples est le vrai grand que vous devez vous inquiéter. p> p> 'ou 1 = 1 ou a =' code>
Donc, le code SQL serait le suivant: p>
Beaucoup de gens tombent dans ce piège. La création de fonctions rend le code moins lisible et n'est pas la preuve future. Je n'ai aucun moyen de suivre Sdown tous les sites ASP classiques que j'ai construits il y a des années, sans parler de la mise à jour d'une fonction qu'ils peuvent ou non utiliser. Les paramètres ADO ou les procédures stockées paramterisé sont la voie à suivre.
Je suis d'accord Les paramètres sont les meilleures pratiques, mais si vous essayez de nettoyer un tas de code Real FAS rapidement, tout en enveloppant toutes les entrées utilisateur dans une fonction est plus facile.
Je ne pense pas que cela prend aussi longtemps pour ajouter un tas de ocmd.parameters.appendez ocmd.creatreparamètre (...) code> des déclarations de votre code et honnêtement dans des situations comme ceci, je pense que vous êtes meilleur Off se concentrant sur la qualité plutôt que sur la vitesse, en particulier si vous n'avez pas le temps de faire le travail deux fois.
Vous pouvez également consulter un projet ASP Classic Open Source appelé «Owasp Stinger». Cela aide non seulement à l'injection SQL, mais à une injection d'en-tête et de nombreux autres problèmes de sécurité communs à toutes les applications Web. P>
http://www.owasp.org/index.php/classic_asp_security_project p>
Voici un autre bon lien et exemple. P>
http : //blogs.iis.net/nazim/archive/2008/04/28/filtering-SQL-Injection-de-classic-asp.aspx P>
Dans le passé, nous venons de créer quelques fonctions pour gérer toute entrée extérieure pour les injections SQL et XSS. Ensuite, nous avons converti lentement toutes les procédures SQL en ligne en ligne. P>
Dupliqué possible de Protection par injection SQL classique ASP