2017-03-17 2 views
1

Suite à un audit sur notre application Swing, il semble que certains mots de passe de nos utilisateurs restent en mémoire longtemps après leur connexion ou même leur sortie.Utilisation du client HTTP Apache sans passer les informations d'identification en tant que chaîne?

L'une des causes semblent être que UsernamePasswordCredentials Apache HttpClient stocke le mot de passe comme final String, empêchant d'effacer de la mémoire programme (voir Why is char[] preferred over String for passwords?).

Cependant, puisque l'interface Credentials qu'il implémente a une méthode String getPassword(), il ne semble pas possible d'éviter la conversion en String à un certain point.

Existe-t-il un autre moyen d'éviter de passer le mot de passe String dans ce cas?

Nous utilisons HttpClient 4.0.3 mais il ne semble pas que cela ait changé dans les versions plus récentes.

Répondre

0

Apache dit que l'initialisation UsernamePasswordCredentials avec la chaîne de mot de passe est dépréciée

UsernamePasswordCredentials(String usernamePassword)
Obsolète.
(4,5) sera remplacé par chaîne, char [] dans 5,0

UsernamePasswordCredentials(String userName, String password)
Le constructeur avec les arguments de nom d'utilisateur et mot de passe.

https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/UsernamePasswordCredentials.html

Utilisez-vous la dernière version de la bibliothèque? Si c'est le cas, ils ne stockent pas le mot de passe en tant que chaîne, mais plutôt char [].

+0

Nous n'utilisons pas la dernière version, mais la version 5.0 est toujours en version alpha. En effet, il semble qu'ils vont complètement changer la déclaration pour utiliser 'char []' partout dans 5, mais cela n'aide pas vraiment pour le moment. De plus, l'autre constructeur (que nous utilisons) n'est pas déprécié (encore). –

+0

Je pense, que diriez-vous de sous-classer et de contourner le getter pour retourner une nouvelle chaîne basée sur votre char []? Vous pouvez passer une chaîne vide au super constructeur et faire en sorte que l'objet serve votre char []. De cette façon, la chaîne qui est conservée est effectivement vide – Edd

+0

La chose est que dès que vous la convertissez en 'String', le' char [] 'est copié et vous n'avez aucune garantie quant à quand il sera effacé de la mémoire. Ce ne serait donc qu'une solution de contournement qui aide à rendre le 'String' aussi éphémère que possible. Notez que cela semble fonctionner, mais j'aurais besoin de plus de garanties, ce qui n'est pas possible avec cette solution. –