web-dev-qa-db-fra.com

Moyen sécurisé pour enregistrer le mot de passe dans le fichier de configuration

Je suis en train de développer une application de bureau et cela nécessitait une connexion à un serveur de base de données MySQL distant, actuellement j'enregistre toutes les informations (IP du serveur, TCP, nom d'utilisateur, mot de passe, nom de la base de données) nécessaires pour la connexion dans un fichier de configuration, appelez app_config.property.
Je me rends compte que ce n'est pas une manière sécurisée de faire les choses et j'aimerais connaître la manière la plus sûre et professionnelle de conserver des données sécurisées comme celle-ci.

Je l'ai développé en Java 7.0; mon intention est de l'exécuter sur Windows 7 ainsi que sur Ubuntu Linux.

10
dilee

Les données stockées dans un fichier texte y restent en clair format sauf si vous cryptez ce fichier lui-même.

Comme l'a dit l'autre répondeur, mieux vaut stocker vos informations d'identification dans la base de données MySQL elle-même. Hachez et salez votre mot de passe (et pourquoi ne pas utiliser un poivre aussi?)

Liens utiles avec de très bonnes réponses:

  1. Comment hacher en toute sécurité les mots de passe?
  2. Comment conserver le sel?
  3. Quel est le but d'un poivre?

MODIFIER:

Suite à vos commentaires:

  • Vous voulez soit faire la même chose que Wordpress, Joomla et d'autres CMS célèbres: créer un tableau séparé où vous pouvez stocker ces informations.
  • Ou vous hébergez peut-être votre application Web sur un serveur sur lequel vous êtes limité dans l'ordre du nombre de bases de données et de tables au sein d'une base de données que vous êtes autorisé à créer: dans ce cas, vous pouvez créer un fichier de configuration PHP ( au lieu d'un fichier texte) où vous stockez ces informations et suivez les bonnes pratiques dans de telles situations (telles que la protection du dossier dans lequel se trouve ce fichier avec un fichier .htaccess)
3
user45139

Si possible, ne stockez pas le nom d'utilisateur et le mot de passe dans le fichier de configuration, demandez à l'utilisateur de fournir un nom d'utilisateur et un mot de passe lors de l'ouverture de l'application et de créer une connexion pour l'utilisateur sur la base de données et ne donnez à cet utilisateur que le minimum d'autorisations pour les tables de base de données dont ils ont besoin pour exécuter l'application.

https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql

3
user89186

Il n'y a pas de moyen sûr de le faire. Vous pouvez masquer, masquer ou faire ce que vous voulez, mais si l'utilisateur/mot de passe se trouve dans un fichier de configuration ou à l'intérieur du code, il ne sera jamais sécurisé. Quelqu'un peut toujours accéder aux données/exécutables et obtenir l'utilisateur/mot de passe, la seule différence est la difficulté à obtenir ces informations (simplement lire un fichier ou devoir inverser le code). Le seul moyen sûr consiste à demander à l'utilisateur d'introduire ces données.

1
YoMismo

Prenez la moyenne PHP application web, comme Wordpress, et il enregistre la connexion Mysql en texte clair. Bien sûr, l'utilisateur moyen ne peut pas voir cela, seuls les utilisateurs qui ont accès au code.

Ce que j'essaie de dire, c'est que si cela pouvait être fait autrement, ce serait probablement le cas.

Vous pouvez configurer un service Web qui interagit avec la base de données et limiter plus précisément l'accès et les droits à la base de données, mais je ne sais pas si cela améliore vraiment la sécurité, et je n'ai pas le temps d'y penser.

Vous pouvez limiter les droits de base de données par table à tout ce qui est nécessaire: sélectionner, mettre à jour, supprimer et/ou insérer.

1
SPRBRN

brouiller le code fera l'affaire, je n'utiliserais pas de fichier de configuration en texte pur.

mais si vous voulez un fichier de configuration, vous pouvez avoir des fichiers cryptés en Java, j'ai moi-même écrit quelques applications de cryptage en utilisant AES et PPK (RSA). crypter le fichier, vous pouvez soit crypter le fichier avec une clé que seul votre code d'application connaîtra, soit utiliser des ID matériels et des sels pour que vous ne puissiez pas déplacer le fichier de configuration sur différents ordinateurs.

en utilisant un flux d'octets, vous pouvez crypter et décrypter à la volée sans modifier les fichiers, sauf si vous le souhaitez.

Ce serait ma suggestion pour ce scénario spécifique.

1
TheHidden