Partager via


Sécurité (LINQ to DataSet)

Cette rubrique traite des problèmes de sécurité dans LINQ to DataSet.

Passage d’une requête à un composant non approuvé

Une requête LINQ to DataSet peut être formulée dans un point d’un programme et exécutée dans un autre. Au moment où la requête est formulée, la requête peut référencer n’importe quel élément visible à ce stade, tel que les membres privés de la classe à laquelle appartient la méthode appelante ou les symboles représentant des variables/arguments locaux. Au moment de l’exécution, la requête pourra réellement accéder aux membres auxquels elle faisait référence lors de sa formulation, même si le code appelant n’a pas de visibilité sur eux. Le code qui exécute la requête n’a pas de visibilité supplémentaire arbitraire, car il ne peut pas choisir ce qu’il faut accéder. Il ne pourra accéder qu'à ce à quoi la requête a accès, et uniquement par le biais de la requête elle-même.

Cela implique qu’en transmettant une référence à une requête à un autre composant du code, le composant recevant la requête est autorisé à accéder à tous les membres publics et privés auxquels la requête fait référence. En général, les requêtes LINQ to DataSet ne doivent pas être passées à des composants non approuvés, sauf si la requête a été soigneusement construite afin qu’elle n’expose pas les informations qui doivent être conservées privées.

Entrée externe

Les applications prennent souvent des entrées externes (à partir d’un utilisateur ou d’un autre agent externe) et effectuent des actions en fonction de cette entrée. Dans le cas de LINQ to DataSet, l’application peut construire une requête d’une certaine manière, en fonction d’une entrée externe ou d’utiliser une entrée externe dans la requête. Les requêtes LINQ to DataSet acceptent des paramètres partout où les littéraux sont acceptés. Les développeurs d’applications doivent utiliser des requêtes paramétrables plutôt que d’injecter des littéraux d’un agent externe directement dans la requête.

Toute entrée directement ou indirectement dérivée de l’utilisateur ou d’un agent externe peut avoir du contenu qui tire parti de la syntaxe du langage cible afin d’effectuer des actions non autorisées. Il s’agit d’une attaque par injection SQL, nommée après un modèle d’attaque où le langage cible est Transact-SQL. L’entrée utilisateur injectée directement dans la requête est utilisée pour supprimer une table de base de données, provoquer un déni de service ou modifier la nature de l’opération en cours d’exécution. Bien que la composition des requêtes soit possible dans LINQ to DataSet, elle est effectuée via l’API du modèle objet. Les requêtes LINQ to DataSet ne sont pas composées à l’aide de manipulations de chaînes ou de concaténation, car elles se trouvent dans Transact-SQL et ne sont pas sensibles aux attaques par injection SQL au sens traditionnel.

Voir aussi

  • Guide de programmation