2009-05-29 7 views
10

L'utilisation de SqlParameters est une méthode recommandée pour empêcher l'injection SQL dans vos requêtes de base de données. Où puis-je trouver le code/la fonction qui nettoie ces paramètres en interne? Je voudrais réutiliser cette fonction dans une implémentation personnalisée de la mienne. J'ai essayé de le trouver en utilisant Reflector, mais je n'ai pas réussi.Comment SqlCommand désinfecte-t-il les paramètres?

+0

Grande question - il est important de comprendre à quel point la sécurité est fournie par l'utilisation de requêtes paramétrées. – RedFilter

Répondre

24

Il protège contre l'injection SQL, pas XSS, et il n'y a pas de code ou de fonction qui assainit les données de paramètre.

La protection est accomplie en transmettant les valeurs de paramètres au serveur séparément de la chaîne de requête, de sorte que les valeurs sont jamais substituées directement dans l'instruction sql.

Ainsi, au lieu de quelque chose en cours d'exécution serveur SQL comme ceci:

SELECT * FROM [table] WHERE [column] = ParameterValue 

Il est plus que si elle a couru quelque chose comme ceci:

DECLARE @ParamValue int 
    -- //@ParamValue variable is populated from the framework in a safe way 
SELECT * FROM [table] WHERE [column] = @ParamValue 

C'est plus rapide et beaucoup plus sûr et plus robuste que fonction cela devrait évaluer les données de paramètres. Une telle fonction devrait être très complexe (lire: erreur sujette) pour gérer des choses comme custom escape characters et les améliorations futures.

Ce côté ordonné étapes tout le problème: les données sont des données, le code est le code, et jamais le twain doit se rencontrer.


Votre commentaire à l'autre, maintenant supprimé, réponse:

Si je passe la valeur O'Rourke, il encode être O''Rourke afin qu'il ne se casse pas la requête. Correct?

Non, ce n'est pas correct. La variable est créée directement à partir d'un bloc de données, et aucun échappement ou codage particulier n'est donc nécessaire.

+0

OK, ça a du sens, merci. "La variable // @ ParamValue est générée à partir du framework de manière sécurisée" comment est-ce que cela se passe en toute sécurité? –

+0

Ce n'est pas sql - la variable est créée par sql server à partir du bloc _data_ transmis par le client, mais elle est conservée dans un segment de données et jamais traitée comme du code, les données n'ont donc pas besoin d'être échappées ou codées. –

+0

Connaissez-vous de la documentation détaillée à ce sujet? J'aimerais vraiment comprendre tout le processus. –

Questions connexes