// you’re reading...

Internet

E-Mail Adresse verschlüsseln

Im Internet sind oft Hacker unterwegs, welche Sicherheitslücken in Webanwendungen suchen. Hacker haben nicht nur immer die Intention, Aufmerksamkeit zuerregen und somit die Webanwendung zu abzuschalten, sondern sammeln auch gerne Benutzerdaten von Communities, um evtl. mit diesen Zugangsdaten sich in anderen Webseiten anmelden zu können. Verwenden Anwender überall die gleichen Zugangsdaten, können Hacker mit geklauten Zugangsdaten recht einfach bei Ebay oder Amazon für Umsonst einkaufen. Auch Mitarbeiter der Community mit Leseberechtigung auf der Datenbank können die Daten auslesen.

Als Webmaster können Sie diese Sicherheitslücke reduzieren, indem Zugangsdaten in Ihrem Projekt komplett verschlüsselt werden.

Zugangsdaten verschlüsseln

In meinem Beispiel hat eine Community als Zugangsdaten pro Anwender E-Mail Adresse und Passwort gespeichert. Gelingt einem Hacker der Zugang zur Datenbank, kann dieser mit den Zugangsdaten schon Schaden anrichten. Im Normalfall ist jedoch das Passwort verschlüsselt. Ein Schritt weiter geht mein Prinzip, auch den Benutzerloginnamen, sprich hier die E-Mail Adresse zu verschlüsseln. Und zwar so sicher wie das Passwort. Dadurch stehen in der Datenbank in der User-Tabelle nur zwei Spalten mit gehashten Werten. Somit ist nach einem Datenklau auch nicht die E-Mail Adresse der Anwender bekannt.

Beispielprogramm

Im Grunde müssen Sie statt nur dem Passwort auch die E-Mail Adresse mit verschlüsseln. Dies sieht im Quellcode beispielhaft wie folgt aus:

token = new MailPasswordToken(email, password);

    ...

    public AuthenticationInfo doLogin(MailPasswordToken token)
    {
        return userService.getLoginMatch(Sha256Hash(token.getEmail), Sha256Hash(token.getPassword));    
    }

Natürlich müssen Sie auch das Anlegen des Benutzers in der Datenbank anpassen:

    public void createLogin(MailPasswordToken token)
    {
        userService.create(Sha256Hash(token.getEmail), Sha256Hash(token.getPassword));
    }

Vorteile und Nachteile

Vorteil ist hier die höhere Sicherheit, die Sie dem Anwender geben können, dass seine Zugangsdaten zu 100% unleserlich in der Datenbank gespeichert werden. Jedoch hat dies für Sie als Webmaster den Nachteil, dass Sie dem Anwender keine E-Mails mehr senden können, da die E-Mail Adresse nicht mehr lesbar ist. E-Mails können nur noch versendet werden, wenn der n beim Login seine E-Mail Adresse in der Session gespeichert bekommt und selbst Aktionen ausführt, welche E-Mails versenden. Auch das Zusenden eines neu generierten Passworts wäre noch möglich:

    public void resetPassword(String email)
    {
        String newPassword = userService.resetPassword(Sha256Hash(email));
        sendPasswordMail(email, newPassword);
    }

Natürlich ist es kein Muss, sich mit dieser Sicherheit im Mailversand einzuschränken. Im Regelfall sollten Sicherheitsmaßnahmen getroffen werden, welche ein Auslesen der Zugangsdaten aus der Datenbank im Vorfeld verhindern sollten.

Empfehlen:    
   

Diskussion

3 Kommentare für “E-Mail Adresse verschlüsseln”

  1. Hallo Christian, vielen Dank für diesen Tipp. Als Neuling bin ich danbar für jeden Tipp – da ich sehr viele Spammails bekomme weil meine Mailadresse sichtbar ist.

    Posted by Sven | Februar 27, 2013, 21:15
  2. Interessanter Ansatz. Allerdings wird das dann wie beschrieben schwer die Mitglieder zu erreichen. Bei einem Shop z.B müsste der Kunde jedes mal seine Email neu eingeben oder diese zumindest während der Sitzung gespeichert werden…

    Posted by Max | Februar 28, 2013, 00:01
    • Das Logintoken sollte dann die E-Mail unverschlüsselt speichern. Aber das ist ja auch in dem Beispiel dann selbstverständlich.
      Und es gibt dann nur Mails, wenn der Kunde am System angemeldet ist.

      Posted by Basian Ca | März 13, 2013, 16:20

Kommentar schreiben


(Eingegebener Name wird unter Impressum/Kontakt der Website validiert)

*