Dans ADO.NET, vous pouvez ajouter des paramètres à un objet de commande pour ajouter en toute sécurité une entrée utilisateur à une requête SQL. Quel est l'équivalent pour les autres prédicats communs à une requête SQL? J'écris un programme qui est essentiellement un mappeur O-R très limité et un générateur SQL (il se concentre fortement autour d'une base de données avec des méta-informations et d'autres bases de données conformes à ces méta-données). En conséquence, je dois pouvoir appeler des choses comme:Comment créer de manière sécurisée des requêtes dans ADO.NET où les tables sélectionnées sont modifiées?
string sql = "select " + USER_SELECTED_COLUMNS +
" from " + USER_SELECTED_TABLE +
" where " + USER_CRITERIA;
Certaines d'entre elles (comme le criteria
) est littéralement entré dans mon programme par des utilisateurs de confiance (autres développeurs dans mon entreprise), tandis que d'autres données sont saisies Je souhaite que ce programme soit sécurisé, et je suis conscient que ce qui précède ne l'est pas. Actuellement, j'ai le USER_SELECTED_COLUMNS
remplacé par les paramètres de commande, mais je n'ai pas été en mesure de trouver l'équivalent pour le CRITERIA et TABLEs. (Ou les colonnes order-by). Existe-t-il des fonctionnalités ADO.NET similaires à SqlParameter
que je peux utiliser pour les prédicats de non-sélection?
Ceci est un cauchemar d'injection SQL, procéder soigneusement et obtenir un test de stylo décent fait sur votre application. – Jamiec
Oui, je sais. Ainsi la question. D'un autre côté, nos clients utilisent depuis maintenant 16 ans une version 100% sensible aux attaques par injection. C'est la belle chose à propos de la relation entreprise-client. Mais: depuis que je l'ai migré de VB6/ADO à C#/ADO.NET, j'ai pensé qu'une sécurité supplémentaire ne ferait pas de mal. – Crisfole