Domanda

Sto utilizzando JBoss Web Services per un'applicazione di servizio di pagamento. A un certo punto devo effettuare chiamate SOAP remote a un fornitore di servizi di pagamento e devo autenticarmi con un token nome utente.

L'unico modo in cui so come farlo con JBossWS è così:

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

Ma il problema qui è che il "changeme" la password è ora in memoria come oggetto String e non ho alcun controllo su quando, se mai, sarà raccolta dei rifiuti. Se un attaccante scarica memoria a questo punto, può trovare le credenziali.

Esiste un altro modo per effettuare chiamate SOAP sicure con JBossWS, dove posso controllare per quanto tempo rimane una password in memoria?

È stato utile?

Soluzione

Sono abbastanza sicuro che non esiste un modo. Le stringhe sono immutabili in Java, quindi non sarai in grado di riscrivere la stringa. È possibile utilizzare un array di byte per memorizzare la password e tale array di byte può essere riscritto. Ma probabilmente dovresti convertirlo in una stringa ad un certo punto comunque ...

Dall'altro lato, se un utente malintenzionato ha accesso alla tua macchina per ottenere un dump della memoria, allora sei fregato comunque. Se l'attaccante ha già così tanto accesso, può fare praticamente tutto ciò che vuole ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top