La protection de l'accès à votre source de données doit être l'un des principaux objectifs d'une application sécurisée. Pour aider à limiter l'accès à votre source de données, vous devez sécuriser des informations de connexion telles que l'ID utilisateur, le mot de passe et le nom de source de données. Les ID utilisateur et les mots de passe stockés en texte brut, comme dans le code source, constituent un problème de sécurité sérieux. Même si vous fournissez une version compilée de votre code contenant des informations d'ID utilisateur et de mot de passe à une source externe, il est possible de désassembler votre code compilé et d'exposer votre ID utilisateur et votre mot de passe à l'aide de l'outil MSIL Disassembler (Ildasm.exe). Il est donc crucial que des informations critiques que sont les ID utilisateur et les mots de passe ne figurent dans votre code.
Spécification d'authentification Windows (sécurité intégrée)
Il est conseillé d'utiliser une authentification Windows (également appelée sécurité intégrée) chaque fois que c'est possible. La syntaxe employée dans la chaîne de connexion varie en fonction du fournisseur. Le tableau suivant présente la syntaxe utilisée avec les fournisseurs de données .NET Framework.
| Fournisseur | Syntaxe |
|---|---|
| SqlClient | Integrated Security=true; |
| SqlClient, OleDb | Integrated Security=SSPI; |
| Odbc | Trusted_Connection=yes; |
| OracleClient | Integrated Security=yes; |
Notez que Integrated Security=true lève une exception en cas d'utilisation avec le fournisseur OleDb.
Remarque de sécurité |
|---|
| L'attribution au mot clé Persist Security Info de la valeur true ou yes dans une chaîne de connexion permet d'obtenir des informations sensibles pour la sécurité, dont l'ID utilisateur et le mot de passe, de la connexion une fois la connexion ouverte. Si vous devez fournir un ID utilisateur et un mot de passe lors de l'établissement d'une connexion, vous êtes parfaitement protégé si ces informations sont écartées après qu'elles ont été utilisées pour ouvrir la connexion, ce qui se passe lorsque la valeur de Persist Security Info est false ou no. Cela est particulièrement vrai si vous fournissez une connexion ouverte à une source qui n'est pas digne de confiance ou encore des informations de connexion persistantes à un disque. En définissant Persist Security Info avec la valeur false, vous avez la garantie que la source qui n'est pas digne de confiance n'aura pas accès aux informations de sécurité sensibles de votre connexion et que ces informations ne seront pas copiées sur le disque avec les informations de votre chaîne de connexion. Persist Security Info a, par défaut, la valeur false. |
N'utilisez pas de fichiers UDL (Universal Data Link)
Vous pouvez fournir des informations de connexion pour un objet OleDbConnection dans un fichier UDL (Universal Data Link). C'est cependant déconseillé. Les fichiers UDL n'étant pas chiffrés, ils exposent les informations de chaîne de connexion en texte brut. Comme un fichier UDL est une ressource basée sur un fichier externe pour votre application, il n'est pas possible de le sécuriser à l'aide du .NET Framework.
Stockage de chaînes de connexion dans des fichiers de configuration
Pour éviter de stocker des chaînes de connexion dans votre code, vous pouvez les stocker dans le fichier web.config pour une application ASP.NET et dans le fichier app.config pour une application Windows.
Vous pouvez stocker la chaîne de connexion dans le fichier de configuration de l'élément <connectionStrings>. Les chaînes de connexion sont stockées comme paires clé-valeur, où le nom peut être utilisé pour rechercher la valeur stockée dans l'attribut connectionString lors de l'exécution. L'exemple de fichier de configuration suivant présente une chaîne de connexion nommée DatabaseConnection qui fait référence à une chaîne de connexion qui connecte à une instance locale de SQL Server.
<connectionStrings>
<add name="DatabaseConnection"
connectionString="Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local);"
providerName="System.Data.SqlClient" />
</connectionStrings>Extraction de chaînes de connexion à partir de fichiers de configuration
L'espace de noms System.Configuration fournit des classes pour utiliser les informations de configuration stockées dans des fichiers de configuration. La classe ConnectionStringSettings comprend deux propriétés qui sont mappées aux noms figurant dans l'exemple de section <connectionStrings> présenté ci-avant.
- ConnectionString
-
Chaîne de connexion
- Name
-
Nom de la chaîne de connexion dans la section <connectionStrings>
L'exemple suivant extrait la chaîne de connexion du fichier de configuration en passant le nom de la chaîne de connexion au ConfigurationManager, qui retourne un objet ConnectionStringSettings. La propriété ConnectionString est utilisée pour afficher la valeur.
Option Explicit On Option Strict On Imports System.Configuration Module Module1 Sub Main() Dim settings As ConnectionStringSettings settings = _ ConfigurationManager.ConnectionStrings("DatabaseConnection") If Not settings Is Nothing Then Console.WriteLine(settings.ConnectionString) End If End Sub End Module
using System; using System.Configuration; class Program { static void Main() { ConnectionStringSettings settings; settings = ConfigurationManager.ConnectionStrings["DatabaseConnection"]; if (settings != null) { Console.WriteLine(settings.ConnectionString); } } }
Utilisation d'une configuration protégée pour chiffrer des chaînes de connexion
La fonction de configuration protégée permet de chiffrer des informations sensibles, notamment des noms et des mots de passe d'utilisateur, des chaînes de connexion de base de données et des clés de chiffrement, dans un fichier de configuration tel que le fichier Web.config pour une application ASP.NET ou le fichier App.config pour une application Windows. Voir Chiffrement des informations de configuration à l'aide de la configuration protégée, Encrypting and Decrypting Configuration Sections et Procédure pas à pas : chiffrement des informations de configuration à l'aide de la configuration protégée.
Constitution de chaînes de connexion à partir d'une entrée de l'utilisateur
Si vous obtenez les informations de chaîne de connexion d'une source externe, par exemple si l'utilisateur fournit l'ID utilisateur et le mot de passe, vous devez valider toute entrée de la source pour vous assurer qu'elle respecte le format correct et ne contient pas de paramètre supplémentaire affectant votre connexion. Pour plus d'informations, voir Validation des entrées d'utilisateur.
Utilisation des générateurs de chaînes de connexion
La classe DbConnectionStringBuilder fournit la classe de base qu'utilisent les générateurs de chaînes de connexion fortement typées. Ils vous permettent de créer par programmation des chaînes de connexion dont la syntaxe est correcte et d'analyser et re-générer des chaînes de connexion existantes. Vous pouvez utiliser la classe DbConnectionStringBuilder pour affecter des paires clé/valeur arbitraires et passer la chaîne de connexion ainsi obtenue à un fournisseur fortement typé. Les fournisseurs de données suivants inclus dans le .NET Framework fournissent des classes fortement typées qui héritent de DbConnectionStringBuilder :
Voir aussi
Tâches
Comment : sécuriser des chaînes de connexion lors de l'utilisation de contrôles de source de donnéesConcepts
Utilisation de chaînes de connexionChiffrement et accès aux données
Securing the User's Password
Autres ressources
Sécurisation des applications ADO.NETChiffrement des informations de configuration à l'aide de la configuration protégée
Remarque de sécurité
Outils (masquer)