2 votes

Injection SQL de TableAdapters

Bonjour, j'utilise un jeu de données et dans ce jeu de données j'ai un adaptateur de table. Dans mes adaptateurs de table, j'ai utilisé des procédures stockées comme requêtes. Si j'utilise les lignes suivantes pour insérer des données de formulaire à l'aide de mon adaptateur de table, est-ce sûr contre l'injection SQL ? Merci.

UserDataSetTableAdapters.UserInformationTableAdapter myFactory = new TestProject.UserDataSetTableAdapters.UserInformationTableAdapter();
            myFactory.spTest_InsertUserInformation(id, frmAddress);

4voto

lc. Points 50297

Sans afficher votre code de procédure stockée, il n'y a aucun moyen de vraiment répondre à votre question, mais vous pouvez probablement y répondre vous-même.


Les attaques par injection SQL proviennent de données saisies par l'utilisateur qui se glissent dans des requêtes SQL générées et exécutées de manière dynamique. L'utilisation d'une procédure stockée permet généralement d'éviter ce problème, car elle transmet les arguments en tant que paramètres et ne génère donc pas de SQL de manière dynamique. Les procédures sont automatiquement encapsulées et ne font pas partie du texte original de votre requête SQL.

Prenons l'exemple suivant :

SELECT *
FROM myTable
WHERE myId = @ID;

En tant que paramètre, vous êtes sûr de mettre @ID en "21 ; DROP TABLE myTable ;". Il sera échappé pour vous et la chaîne entière sera comparée à myId. Toutefois, si vous générez dynamiquement votre requête SQL comme suit

string query = "SELECT *\nFROM myTable\nWHERE myId = " + userEnteredText + ";";

Vous obtiendrez alors ce qui suit :

SELECT *
FROM myTable
WHERE myId = 21; DROP TABLE myTable;;

Aïe.


Donc, pour répondre à votre question : SI votre procédure stockée ne génère pas dynamiquement du SQL basé sur ses paramètres et EXEC ils, vous devriez être en sécurité.

Remarque : cela dépend bien sûr du fait que votre fournisseur de données .NET appelle la procédure avec des paramètres et ne génère pas d'instructions SQL dynamiques. La plupart d'entre eux le font correctement, mais si vous utilisez un fournisseur tiers, vous devez le vérifier avant de penser que vous êtes en sécurité.

1voto

eglasius Points 26221

Réponse courte : Oui :)

Mise à jour 1 : Même si vous n'utilisiez pas de procédure stockée et que vous définissiez des requêtes avec des paramètres sur l'adaptateur, vous seriez protégé contre l'injection sql, par exemple : select f1, f2 where f3 = @myparameter ... qui utiliserait une requête préparée.

0voto

MatthewMartin Points 12385

Vérifier en utilisant le traçage de SQL Prolier. Si l'API sous-jacente est sûre, vous verrez des commandes T-SQL paramétrées, quelque chose du type sp_executesql.

0voto

SQLMenace Points 68670

Si vous utilisez du SQL dynamique dans la proc elle-même qui utilise EXEC (@SQL) et non pas sp_executesql avec des paramètres alors vous n'êtes pas en sécurité, sinon vous êtes

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