2009-04-30 16 views
0

Ich verwende JBoss Web Services für eine Zahlungsdienstanwendung. Irgendwann muss ich Remote-SOAP-Anrufe an einen Zahlungsdienstanbieter machen und ich muss mich mit einem Benutzernamen-Token authentifizieren.Wie lösche ich Passwörter aus dem Speicher, wenn ich Benutzernamen-Tokens mit JBossWS verwende?

Der einzige Weg, ich weiß, wie dies mit JBossWS zu tun ist, wie folgt aus:

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

Aber das Problem hier ist, dass die „changeme“ Passwort nun im Speicher als String-Objekt ist, und ich habe keine Kontrolle wann, wenn überhaupt, wird Müll gesammelt. Wenn ein Angreifer zu diesem Zeitpunkt Speicher ablegt, kann er die Anmeldeinformationen finden.

Gibt es eine andere Möglichkeit, sichere SOAP-Aufrufe mit JBossWS zu machen, wo ich kontrollieren kann, wie lange ein Passwort im Speicher verbleibt?

Antwort

0

Ich bin mir ziemlich sicher, dass es keinen Weg gibt. Zeichenketten sind in Java unveränderlich, so dass Sie die Zeichenkette nicht umschreiben können. Sie könnten ein Byte-Array verwenden, um das Kennwort zu speichern, und dieses Byte-Array könnte neu geschrieben werden. Aber Sie müssen wahrscheinlich irgendwann zu einem String konvertieren ...

Auf der anderen Seite, wenn ein Angreifer Zugriff auf Ihren Computer hat, um einen Speicherabzug zu bekommen, dann sind Sie sowieso geschraubt. Wenn der Angreifer bereits so viel Zugriff hat, kann er so ziemlich alles machen, was er will ...