2013-08-20 1 views
5

ich mehrere Artikel und Beiträge über die Sicherheit in Bezug auf (beachten Sie Comparing input password to stored hashed password in a web app oder Why is char[] preferred over String for passwords?Ist es möglich, char() anstelle von Strings in einem Servlet zu verwenden, um das Passwort zu speichern?

Da lesen einen Parameterwert von Anfrage abruft request.getParameter („passwordFieldName“), die einen String zurückgibt, gibt es eine Möglichkeit, ein abrufen Parameter von der Anfrage als char []?

+0

mögliche Duplikate von [Wie kann ich in Java ein Passwort aus einem HttpServletRequest-Header extrahieren, ohne ein String-Objekt zu generieren?] (Http://stackoverflow.com/questions/15016250/in-java-how-do-i- extract-a-password-from-a-httpservletrequest-header-ohne-ge) – Raedwald

Antwort

-2

Sie können nur die String ‚s Methode toCharArray es in ein char[] zu konvertieren.

String str = request.getParameter("passwordFieldName"); 
char[] pwArr = str.toCharArray(); 

Se e the docs für weitere Informationen.

+0

Sie können auch 'getBytes (String charset)' verwenden, um die Zeichenfolge als 'byte []' zu erhalten. –

+2

str.toCharArray() gibt ein neu zugewiesenes Zeichen-Array zurück (siehe javadoc), daher wird das String-Passwort str überall im System vorhanden sein, in jedem Thread-Dump/Heap-Analysator bis zur Garbage Collection, und das versuche ich zu vermeiden –

+0

Ich glaube, dass das Kennwort in allen Fällen vorhanden sein wird, da es in der Anforderung auf dem Server in Arbeitsspeicher gespeichert wird. Egal, was Sie tun, das String-Passwort wird irgendwo im Speicher vorhanden sein. –

0

Leider kenne ich keine Möglichkeit.

Die Anfrageparameter sind bereits geladen, hoffentlich intern als wiederverwendetes Byte [] oder char []. Aber dann?

Also vielleicht sollte man ein bisschen HTTP-Server reimplementieren? Nicht ich.

Sie könnten auf der Clientseite das Kennwort in mehr als eine Variable aufteilen und sie verschlüsseln. Ob das besser ist? Wenn Sie Ihrer Serverplattform nicht vertrauen, verwenden Sie besser OpenID oder eine andere delegierte Authentifizierung.