2010-01-11 8 views
5

J'ai des champs de texte à réponse libre et je ne suis pas sûr de savoir comment les nettoyer pour empêcher l'injection SQL. Des idées?Prévention de l'injection SQL sur les champs de texte de réponse libre dans ASP classique

+0

Vous auriez trouvé la réponse vous-même si vous aviez recherché http://stackoverflow.com/questions/tagged/sqlinjection. –

+1

@John vous voulez dire http://stackoverflow.com/questions/tagged/sql-injection+asp-classic et pourtant l'un d'eux a été marqué comme doublon. – cregox

Répondre

16

Créez un parameterized query au lieu de concaténer l'entrée de l'utilisateur dans la requête.

Voici comment faire en asp classique: http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx

Il est également important de noter que la seule façon que vous pouvez être 100% sûr de l'injection sql est de paramétrer une instruction SQL qui utilise des entrées utilisateur, même Une fois que c'est dans la base de données. Exemple: Dites que vous saisissez une entrée utilisateur via une requête paramétrée ou une procédure stockée. Vous serez en sécurité sur l'insert, mais vous devez vous assurer que tout ce qui se passe sur la route qui utilise cette entrée utilise également un paramètre. La concaténation directe de l'entrée de l'utilisateur est une mauvaise idée partout, y compris à l'intérieur de la base de données.

+2

Et si vous devez écrire ASP classique, faites-le en JScript, beaucoup plus agréable! Et, IIRC, fonctionne mieux aussi. – RedFilter

+2

@OrbMan: Comment cela est-il pertinent? JScript est plus agréable si cela ne vous dérange pas de vous isoler, mais la grande majorité des ASP est en VBScript. Franchement, si vous devez utiliser ASP classique dans VBScript, il est beaucoup plus facile d'intégrer des exemples et sera plus facile à lire pour d'autres développeurs ASP typiques. – AnthonyWJones

0

Appelez un storedprocedure.

EDIT: Juste pour clarifier. Construire un SQL dynamique dans un sp peut bien sûr être aussi dangereux que de le faire dans l'application, mais lier les entrées utilisateur dans une requête vous protégera contre l'injection sql, comme décrit ici (discussion spécifique à Oracle, mais le principe s'applique ailleurs):

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:23863706595353

Il n'est pas sql dynamique qui est la question (tous sql est dynamique dans Oracle en fait - même sql statique pro * c/PLSQL). C'est "la construction " de ce sql qui est le problème . Si un utilisateur vous donne des entrées - , ils doivent être liés à la requête - non concaténée. La seconde vous concaténer l'entrée de l'utilisateur dans votre SQL - c'est comme si vous leur donniez la possibilité de vous transmettre le code et vous exécuter ce code. Simple et simple.

+3

Ne le crois pas. C'est un mythe que les procédures stockées protègent contre les vulnérabilités d'injection SQL. Vous êtes tout aussi susceptible de générer une requête SQL dynamique non sécurisée dans une procédure que dans le code d'application. –

+0

Je ne préconise pas la construction dynamique SQL dans un sp, mais fournissant les entrées de champ de texte en tant que paramètres à une déclaration paramétrée dans le sp. – davek