¿Cómo borro las contraseñas de la memoria cuando uso tokens de nombre de usuario con JBossWS?

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

Pregunta

Estoy usando JBoss Web Services para una aplicación de servicio de pago. En algún momento, necesito realizar llamadas SOAP remotas a un proveedor de servicios de pago, y debo autenticar con un token de nombre de usuario.

La única forma en que sé cómo hacer esto con JBossWS es así:

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

Pero el problema aquí es que la " changeme " la contraseña ahora está en la memoria como un objeto String y no tengo control sobre cuándo, si alguna vez, se recolectará la basura. Si un atacante vuelca la memoria en este punto, puede encontrar las credenciales.

¿Hay otra forma de hacer llamadas seguras de SOAP con JBossWS, donde puedo controlar cuánto tiempo permanece una contraseña en la memoria?

¿Fue útil?

Solución

Estoy bastante seguro de que no hay una manera. Las cadenas son inmutables en Java, por lo que no podrá volver a escribir la cadena. Podría usar una matriz de bytes para almacenar la contraseña, y esa matriz de bytes podría reescribirse. Pero probablemente tendrás que convertirlo en una Cadena en algún punto de todas formas ...

En el otro lado, si un atacante tiene acceso suficiente a su máquina para obtener un volcado de memoria, de todos modos está atornillado. Si el atacante ya tiene mucho acceso, puede hacer lo que quiera ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top