Comment puis-je effacer des mots de passe de la mémoire lorsque j'utilise des jetons de nom d'utilisateur avec JBossWS?

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

Question

J'utilise les services Web JBoss pour une application de service de paiement. À un moment donné, je dois passer des appels SOAP distants vers un fournisseur de service de paiement et m'authentifier à l'aide d'un jeton de nom d'utilisateur.

La seule façon pour moi de faire cela avec JBossWS est la suivante:

Map<String, Object> requestContext = ((BindingProvider)port).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, "foobar");
requestContext.put(BindingProvider.PASSWORD_PROPERTY, "changeme");

Mais le problème ici est que le & chang; changeme " Le mot de passe est maintenant en mémoire en tant qu'objet String et je n'ai aucun contrôle sur le moment où il sera récupéré. Si un attaquant vide sa mémoire à ce stade, il peut trouver les informations d'identification.

Y at-il un autre moyen de passer des appels SOAP sécurisés avec JBossWS, où je peux contrôler la durée pendant laquelle un mot de passe reste en mémoire?

Était-ce utile?

La solution

Je suis presque sûr qu'il n'y a pas de moyen. Les chaînes sont immuables en Java, vous ne pourrez donc pas réécrire la chaîne. Vous pouvez utiliser un tableau d'octets pour stocker le mot de passe, et ce tableau d'octets pourrait être réécrit. Mais vous devrez probablement le convertir en chaîne à un moment donné de toute façon ...

D'un autre côté, si un attaquant a suffisamment accès à votre ordinateur pour effectuer un dump de la mémoire, vous êtes de toute façon malmené. Si l'attaquant dispose déjà d'un accès aussi important, il peut faire à peu près tout ce qu'il veut ...

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