Dans une application client-serveur: Comment envoyer à la base de données le mot de passe de l'application de l'utilisateur?

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

Question

J'ai une application de bureau Java qui se connecte directement à la base de données (un Oracle). L'application dispose de plusieurs comptes d'utilisateur. Quelle est la méthode correcte pour envoyer le mot de passe de l'utilisateur (pas le mot de passe de la base de données) sur le réseau? Je ne veux pas l'envoyer en texte brut

Était-ce utile?

La solution

Vous pouvez vous connecter via une connexion socket sécurisée ou hacher le mot de passe localement avant de l'envoyer à la base de données (ou mieux, les deux). Dans l'idéal, le mot de passe doit exister sous forme de texte brut avant le hachage. Si vous pouvez faire tout cela du côté client, mieux ce sera.

Autres conseils

Vous pouvez utiliser une connexion SSL entre le client Oracle et la base de données Oracle. Pour configurer SSL entre client et serveur Oracle à l'aide de JDBC:

Côté serveur:

1) Tout d'abord, l'écouteur doit être configuré pour utiliser le protocole TCPS:

LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484)))

WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/server/wallet/path/)))

Du côté client:

1) les fichiers jars suivants doivent être classpath ojdb14.jar , oraclepki.jar , ojpse.jar

2) L'URL utilisée pour la connexion doit être:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename)))

3) Les propriétés suivantes doivent être définies (en tant que propriété système (options -D) ou propriétés de connexion)

javax.net.ssl.trustStore, 
javax.net.ssl.trustStoreType, 
javax.net.ssl.trustStorePassword

Référence: http: // .oracle.com / technology / tech / java / sqlj_jdbc / pdf / wp-oracle-jdbc_thin_ssl_2007.pdf

D'accord, n'envoyez jamais le mot de passe que l'utilisateur a choisi en texte brut. Cependant, à moins d'utiliser la cryptographie à clé publique, si vous leur envoyez un mot de passe par courrier électronique, le texte sera en clair. Une chose que j’ai souvent vue est que, lorsque l’utilisateur oublie le mot de passe et demande qu’il lui soit envoyé, le système génère un nouveau mot de passe et lui en envoie celui-ci . L’utilisateur peut alors changer le mot de passe.

De cette manière, le mot de passe choisi par l'utilisateur (qu'il pourrait utiliser ailleurs) n'est jamais envoyé. Son mot de passe temporaire étant envoyé en texte brut, il doit être modifié peu de temps après.

Si vous ne voulez pas envoyer les données en texte brut, utilisez le cryptage !!!

Utilisez des algorithmes de chiffrement tels que AES, Twofish, etc.

Vous devez également prendre en compte l'emplacement de votre client et de votre serveur. S'ils sont tous deux sur le même ordinateur, l'utilisation d'un chiffrement est inutile. Si elles se trouvent sur des ordinateurs différents, utilisez un algorithme de cryptage pour envoyer des données sensibles.

Si VOUS vérifiez la validité des mots de passe, vous pouvez simplement envoyer le hachage du mot de passe. Attention, cette méthode ne fonctionnera que si vous comparez vous-même le mot de passe. Si une autre application (hors de votre contrôle) effectue le travail de validation, vous ne pouvez pas hacher le mot de passe.

Si vous vous connectez directement à la base de données sans couche intermédiaire, envisagez d'utiliser un utilisateur de base de données pour chaque utilisateur réel, car vous ne pouvez pas réellement sécuriser l'accès de l'application.

Si vous vous connectez à Oracle avec ORa * Net, le mot de passe de l'utilisateur est automatiquement chiffré (à partir d'Oracle 8). Toutefois, il peut parfois revenir à des mots de passe non chiffrés. Cela peut être désactivé avec ORA_ENCRYPT_LOGIN = true dans l'environnement du client.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top