2016-12-10 4 views
2

Um mein Passwort zurückzusetzen, möchte ich dem Benutzer einen Link zu site/account/{hash} senden, wobei {hash} ein Hash des Benutzerpassworts und ein Zeitstempel ist.
Ich habe den folgenden Code nur die E-Mail Hash und eine lesbare der Verbindung:Erzeugen eines dynamischen Passwortrücksetzlinks

String check = info.mail; 
    MessageDigest md = MessageDigest.getInstance("SHA-1"); 
    String checkHash = Base64.encodeBase64String(md.digest(check.getBytes())); 

    if(checkHash.equals(hash)){ 
     return ResponseEntity.ok("Password reset to: " + info.password); 
    }else{ 
     return ResponseEntity.ok("Hash didn't equal to: " + checkHash); 
    } 

Das Problem ist, dass, wenn ich das Base64 konvertieren kann es umfassen/Zeichen Was wird Schlamassel meine Links und Überprüfung der Hash. Ich kann nach dem Hashing einfach alle unerwünschten Zeichen durch etwas anderes ersetzen, aber gibt es eine andere Möglichkeit, dass Ihr Hash nur einen bestimmten Teil von Codes enthält?

Auch ich weiß, die Rücksendungen werden immer noch unsicher gesendet, aber das ist nur zum Testen und Debuggen.

Antwort

2

Die RFC 3548 specifies a variant oft genannt "base64url" speziell für diesen Zweck entwickelt. In dieser Variante werden + und / durch - und _ ersetzt.

Java 8 unterstützt die neue Version Base64 class. Wenn Sie mit einer älteren Version festgefahren sind, kann Base64 class of Apache Commons mit dem Konstruktor new Base64(true) als urlsicher konfiguriert werden.

Andere Optionen können sein:

  • nicht Base64 verwenden, aber die Bytes als hexadezimale Darstellung übertragen (die enthalten darf keine Sonderzeichen):

    String checkHash = toHex(md.digest(check.getBytes())); 
    

    mit

    private static String toHex(byte[] bytes) { 
        StringBuilder sb = new StringBuilder(); 
        for (byte b : bytes) { 
         sb.append(String.format("%02X", b)); 
        } 
        return sb.toString(); 
    } 
    
  • Verwenden Sie URL-Codierung/Decodierung auf dem g enerated hash (das ist, was Sie bereits wissen)

Verwandte Themen