73 votes

Comment SQLParameter empêche-t-il l'injection SQL?

Ce qui se passe exactement dans le contexte qui le rend si SQLParameter empêche SQL Inection attaques dans un .NET requête Paramétrée? C'est juste de l'enlever, tout suspect caractères ou est-il quelque chose de plus?

A quelqu'un là-bas vérifié pour voir ce qui se fait de SQL Server lorsque vous transmettez des entrées malveillantes?

Connexes: Pouvez-vous utiliser un SQLParameter dans le SQL DE la déclaration?

75voto

KeithS Points 36130

Fondamentalement, lorsque vous effectuez une SQLCommand à l'aide de SQLParameters, les paramètres ne sont jamais directement insérés dans la déclaration. Au lieu de cela, une procédure stockée système appelé sp_executesql est appelé et donné de la chaîne SQL et le tableau de paramètres. Lorsque utilisé en tant que tel, les paramètres sont isolés et traités comme des données, au lieu d'avoir à être analysée de la déclaration (et donc éventuellement de le changer), de sorte que les paramètres contiennent ne peut jamais être "exécuté". Il vous suffit de faire une grosse erreur que la valeur du paramètre n'est pas valide d'une certaine façon.

10voto

Dave Brace Points 929

"Paramètre de collections telles que SqlParameterCollection fournir le type de la vérification et de la validation de la longueur. Si vous utilisez une collection de paramètres, d'entrée est traitée comme une valeur littérale, et SQL Server ne pas le traiter comme le code de l'exécutable. Un avantage supplémentaire de l'utilisation d'une collection de paramètres que vous pouvez appliquer le type et la durée des contrôles. Des valeurs en dehors de la plage de déclencher une exception. C'est un bon exemple de la défense en profondeur."

http://msdn.microsoft.com/en-us/library/ff648339.aspx

5voto

MatthewMartin Points 12385

Lors de l'utilisation de requêtes paramétrées, la surface d'attaque est réduit à monkeying autour avec les paramètres.

N'utilisez SqlParameters, mais n'oubliez pas de dépassement de, dépassement de capacité et non validés paramètres. Par exemple, si la méthode est "proc buy_book (@prix de l'argent)", un utilisateur malveillant de tenter de tromper l'application en cours d'exécution avec @prix fixé à 0,01, ou de tenter d'obtenir la demande de faire quelque chose d'intéressant en soumettant quelque chose qui provoque un dépassement de capacité. Sql Débordements ont tendance à ne pas être intéressant (c'est à dire juste de provoquer des exceptions, vous êtes susceptibles d'être en mesure d'écrire de mémoire adjacentes)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X