web-dev-qa-db-fra.com

Crypter le mot de passe dans App.config

Je veux crypter le mot de passe dans la chaîne de connexion. Lorsque je me connecte à une base de données, la chaîne de connexion est stockée ouvertement dans App.config et je dois trouver un moyen de ne garder que le mot de passe crypté.

25
NDeveloper

Disons que c'est votre chaîne de connexion:

<connectionStrings>
    <add name="cs" connectionString="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=XXSDFASFDKSFJDKLJFDWERIODFSDFHSDJHKJNFJKSD;"/>
</connectionStrings>

Ensuite, vous pouvez faire quelque chose comme ceci:

string myCs = System.Configuration.ConfigurationManager.ConnectionStrings["cs"].ConnectionString;

System.Data.SqlClient.SqlConnectionStringBuilder csb = new System.Data.SqlClient.SqlConnectionStringBuilder(myCs);
csb.Password = EncDecHelper.Decrypt(csb.Password);
myCs = csb.ToString();

Tu peux écrire EncDecHelper.Decrypt en utilisant des exemples d'ici: Crypter et décrypter une chaîne

21
HABJAN

Utilisez la section de configuration connectionStrings et cryptez la section entière - au lieu du simple mot de passe.

C'est plus sûr car la configuration de votre application n'aura plus les noms de serveur et les noms d'utilisateur en texte brut.

Il existe des documents pratiques pour crypter les sections de configuration sur MSDN pour RSA ou DPAPI .

19
Oded

En plus des autres réponses, n'est-il pas préférable d'utiliser le fichier dans le contrôle de code source comme modèle, avec juste des chaînes de connexion chiffrées dev/test pour qu'il fonctionne dans dev/test.

Pour la production (ou d'autres environnements dans lesquels l'application est déployée), le fichier d'informations d'identification chiffré est généré séparément au format de modèle spécifié, géré/mis à jour/déployé séparément, a des autorisations de sécurité appropriées appliquées, jamais vu par quelqu'un d'autre que DBA/DevOps.

0
TenG