8
votes

Injection classique ASP SQL

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.

Ces instructions d'insertion sont exécutées via l'objet de commande ADO.

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?


1 commentaires

5 Réponses :


6
votes

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") + "'"


0 commentaires

6
votes

Ce lien devrait s'avérer utile.

Protection par injection SQL classique ASP


0 commentaires

-1
votes

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:

  • Escape des citations simples,
  • supprimer; et d'autres caractères spéciaux et
  • Assurez-vous que vous ne pouviez pas - (commentaire) sur la fin de la déclaration.

    La plupart des injection SQL vont essayer quelque chose comme 'ou 1 = 1 ou a =' Donc, le code SQL serait le suivant: xxx

    si échappé des guillemets simples est le vrai grand que vous devez vous inquiéter.


3 commentaires

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 (...) 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.



2
votes

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.

http://www.owasp.org/index.php/classic_asp_security_project


0 commentaires

0
votes

Voici un autre bon lien et exemple.

http : //blogs.iis.net/nazim/archive/2008/04/28/filtering-SQL-Injection-de-classic-asp.aspx

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.


0 commentaires