Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mot de passe et dump mémoire

4 réponses
Avatar
Fred
Bonjour à tous,

Je suis confronté au problème suivant.
J'ai une page web qui envoie un login/mot de passe à une servlet.
Cette servlet récupère le mot de passe dans un String via un getParamter
Ici commencent mes ennuis. En effet, le mot de passe lu par la servlet
est en clair. Je le stocke, par conséquent, sous la forme chiffrée pour
une utilisation ultérieure. Le problème est que la String (créée par
l'appel à getParameter) qui contient le mot de passe en clair reste en
mémoire, et est donc lisible via un dump mémoire.

Ma question est, par conséquent, la suivante:
est-il possible de supprimer toute trace en mémoire d'une chaine
contenue dans un objet String?

Merci d'avance pour votre aide.

Fred

4 réponses

Avatar
Al
c'est pour ca que certains api de sécurité utilisent des array de char
et pas des string pour les pw.

la seule solution que je vois c'est de réécrire une pile de lecture de
paramètres (je suppose que la méthode http est POST... faut être sérieux)

pas compliqué.
tu vérifie l'encoding (un truc gente text urleencoded),
tu récupère le contenu de l'inputstream de la request que to stocke dans
un char array.
là tu le décode avec l'équivalent de urldecode mais qui passe pas par
des string mais par des char array
tu tokenize sur &, puis sur =, avec des byte array, et tu récupère ton
paramètre en byte array...

tu peux aussi faire pareil avec une méthode d'encoding form/multipart,
mais ca peux être plus compliqué (quoique)

regarde si qqn n'a pas déjà fait ce genre de lib.

a noter que ton password risque (pas certain) de se retrouver dans la
mémoire d'un apache frontal, dans le module mod_jk...
ya pas que java dans la vie.

a mon avis c'est pas bon comme solution.
j'en viendrait à préférer une solution genre SHA1/MD5 en javascript avec
un protocole chalenge response (genre passe moi le hash de ton PW
précédé de cette chaine unique aléatoire "xsjhsdjh").

je crois que ya un md5 en javascript... ptet aussi un sha1.

et pour le hashage coté serveur, les lib JCE sont écrite sérieusement et
ya pas de pb de string.

Fred a écrit :
Bonjour à tous,

Je suis confronté au problème suivant.
J'ai une page web qui envoie un login/mot de passe à une servlet.
Cette servlet récupère le mot de passe dans un String via un getParamter
Ici commencent mes ennuis. En effet, le mot de passe lu par la servlet
est en clair. Je le stocke, par conséquent, sous la forme chiffrée pour
une utilisation ultérieure. Le problème est que la String (créée par
l'appel à getParameter) qui contient le mot de passe en clair reste en
mémoire, et est donc lisible via un dump mémoire.

Ma question est, par conséquent, la suivante:
est-il possible de supprimer toute trace en mémoire d'une chaine
contenue dans un objet String?

Merci d'avance pour votre aide.

Fred


Avatar
deltaplan
Al wrote:

j'en viendrait à préférer une solution genre SHA1/MD5 en javascript avec
un protocole chalenge response (genre passe moi le hash de ton PW
précédé de cette chaine unique aléatoire "xsjhsdjh").

je crois que ya un md5 en javascript... ptet aussi un sha1.



C'est clairement à mon avis la bonne solution. On n'a JAMAIS besoin de
transférer un mot de passe (du moins, si on maîtrise le développement
aussi bien du module qui envoie que de celui qui reçoit, parce que si on
est obligé de communiquer avec un logiciel qui exige le mot de passe en
clair...)
Avatar
Fred
Deltaplan a écrit :
Al wrote:

j'en viendrait à préférer une solution genre SHA1/MD5 en javascript avec
un protocole chalenge response (genre passe moi le hash de ton PW
précédé de cette chaine unique aléatoire "xsjhsdjh").

je crois que ya un md5 en javascript... ptet aussi un sha1.



C'est clairement à mon avis la bonne solution. On n'a JAMAIS besoin de
transférer un mot de passe (du moins, si on maîtrise le développement
aussi bien du module qui envoie que de celui qui reçoit, parce que si on
est obligé de communiquer avec un logiciel qui exige le mot de passe en
clair...)



Effectivement, je pense également que c'est la solution vers laquelle je
vais m'orienter.

Merci encore pour vos réponses.

Fred
Avatar
Emmanuel Bourg
Fred a écrit :

Effectivement, je pense également que c'est la solution vers laquelle je
vais m'orienter.

Merci encore pour vos réponses.

Fred



A mon avis ne perd pas trop de temps à inventer un masquage compliqué du
mot de passe, dans tous les cas ce sera inefficace. Il suffit d'exécuter
l'applet pas à pas dans un debugguer pour récupérer le mot de passe au
moment ou il est lu du serveur. L'applet étant exécutée par le client tu
ne pourra jamais totalement protéger l'information envoyée.