Comment puis-je éviter que le mot de passe de la base de données soit stocké en texte brut dans le code source ?

StackOverflow https://stackoverflow.com/questions/42833

Question

Dans l'application web que je développe, j'utilise actuellement une solution naïve lors de la connexion à la base de données :

Connection c = DriverManager.getConnection("url", "username", "password");

C'est assez dangereux.Si un attaquant accède au code source, il accède également à la base de données elle-même.Comment mon application Web peut-elle se connecter à la base de données sans stocker le mot de passe de la base de données en texte brut dans le code source ?

Était-ce utile?

La solution

Vous pouvez stocker la chaîne de connexion dans le fichier Web.config ou App.config et chiffrer la section qui la contient.Voici un très bon article que j'ai utilisé dans un projet précédent pour chiffrer la chaîne de connexion :

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

Autres conseils

Dans .NET, la convention consiste à stocker les chaînes de connexion dans un fichier de configuration distinct.

Là-dessus, le le fichier de configuration peut être crypté.

Si vous utilisez Microsoft SQL Server, tout cela n'a plus d'importance si vous utilisez un compte de domaine pour exécuter l'application, qui utilise ensuite une connexion approuvée à la base de données.La chaîne de connexion ne contiendra aucun nom d’utilisateur ni mot de passe dans ce cas.

Je peux recommander ces techniques aux programmeurs .NET :

  • Crypter le mot de passe\chaîne de connexion dans le fichier de configuration
  • Configurez une connexion fiable entre le client et le serveur (c'est-à-direutiliser l'authentification Windows, etc.)

Voici des articles utiles de CodeProject :

Sauf si je manque le point, la connexion doit être gérée par le serveur via un pool de connexions, donc les informations d'identification de connexion sont détenues par le serveur et non par l'application.

En allant plus loin, je m'appuie généralement sur une convention selon laquelle l'application Web frontale (dans une DMZ) ne communique avec la base de données que via un service Web (dans le domaine), offrant ainsi une séparation complète et une sécurité améliorée de la base de données.

De plus, n'accordez jamais de privilèges au compte db au-delà de ce qui est essentiellement nécessaire.

Une approche alternative consiste à effectuer toutes les opérations via des procédures stockées et à accorder à l'utilisateur de l'application l'accès uniquement à ces procédures.

En supposant que vous utilisez MS SQL, vous pouvez profiter de l'authentification Windows qui ne nécessite aucun nom d'utilisateur/passe dans le code source.Sinon, je devrais être d'accord avec les autres affiches recommandant app.config + cryptage.

  1. Créer un utilisateur O/S
  2. Mettez le mot de passe dans une variable d'environnement O/S pour cet utilisateur
  3. Exécutez le programme en tant qu'utilisateur

Avantages :

  1. Seul root ou cet utilisateur peut afficher les variables d'environnement O/S de cet utilisateur
  2. Survit au redémarrage
  3. Vous ne vérifiez jamais accidentellement le mot de passe dans le contrôle de source
  4. Vous n'avez pas à vous soucier de gâcher les autorisations de fichiers
  5. Vous n'avez pas à vous soucier de l'endroit où vous stockez une clé de cryptage
  6. Fonctionne sur la plateforme X
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top