2017-05-30 1 views
0

J'ai une tâche pour empêcher l'injection SQL dans une application Web ASP.Net. Il y a une zone de texte de commentaires que les testeurs ont signalée comme emplacement possible pour l'injection SQL. L'événement de bouton Soumettre qui insère le texte dans la base de données utilise déjà une SQLCommand paramétrée par Oracle. Mais lors des tests, j'ai pu insérer "select 'duff' à partir du dual;" comme un commentaire. Donc, je suis curieux de savoir comment éviter une injection sql quand tout ce que je peux trouver, c'est que les gens disent des paramètres d'utilisation. Tous les conseils sont appréciés. Je vous remercie. Voici les lignes qui appellent le proc stocké.Stérilisation de la zone de texte Asp.Net avant la soumission pour empêcher l'injection SQL

dbCommand = db.GetStoredProcCommand("ABC.Insert_My_Comment"); 
db.AddInParameter(dbCommand, "in_comments", DbType.String, obj.Comments); 
db.ExecuteNonQuery(dbCommand); 
+0

Votre code semble correct. Est-ce que les utilisateurs étiquettent cela pour une injection potentielle de sql sur le seul raisonnement d'une boîte de texte? –

+0

Je suppose que c'est le raisonnement derrière cela. Mais je suis en quelque sorte supposé empêcher tout type de SQL d'être inséré. J'ai pensé à une validation regex, mais connaissez-vous d'autres méthodes? Et merci pour les commentaires. – jhorton

+1

Vous êtes censé empêcher l'insertion du texte d'une requête sql dans un champ de commentaire? Cela ne semble pas être un bon usage de votre temps pour être honnête. Les commentaires sont-ils exécutés en tant que requêtes sur la base de données? Ce n'est pas la même chose que d'empêcher une injection SQL. L'injection serait si quelqu'un mettait ""); DROP TABLE COMMENTAIRES; 'dans la boîte de commentaires et il a effectivement laissé tomber la table. Ce qui ne va pas, puisque votre code mettra simplement ce texte dans le champ de commentaire. Cela a-t-il du sens? –

Répondre

1

SQL Injection

Tant que vous utilisez des paramètres et des procédures stockées, votre système est raisonnablement protégé contre l'injection SQL. Si vos testeurs de pénétration vous posent encore problème, dites-leur que vous avez mis en place une mesure d'atténuation conforme à OWASP guidance, en particulier à l'option 2. S'ils continuent à vous poser des problèmes, demandez-leur quel injection test spécifique a échoué. les failure mode or criticality, spécifiques et/ou s'ils ont pu déclencher un comportement système malveillant ou indésirable. S'ils ne peuvent pas fournir un cas spécifique de comportement attendu différent du comportement réel, ce n'est pas un défaut pouvant donner lieu à une action, et vous devez le fermer en FAD.

Autres types d'injection

Tout simplement parce que vous êtes en sécurité de l'injection SQL ne signifie pas que vous n'êtes pas à l'abri de tous les types d'injection, par exemple quelqu'un pourrait injecter du HTML dans ce champ dans le soutien possible d'un reflected XSS attack. Si des pages de votre site renvoient ce champ de commentaire sur une page, assurez-vous que le contenu est bien encodé en HTML et assurez-vous que personne ne peut contraindre votre site à afficher des tags au milieu de votre page.

+0

C'est une réponse géniale. Je n'ai même pas pensé à l'attaque XSS réfléchie. Je vais m'assurer que l'encodage HTML est utilisé. Je vous remercie. – jhorton

1

Tant que vous placez le commentaire dans un paramètre, il ne peut pas être utilisé pour l'injection.

Le problème se pose lorsque vous générez une chaîne de requête dynamique comme; "INSERT INTO COMMENTS Comment = '" + userComment + "'"