Heute ist es einem Freund passiert: Er oder besser gesagt seine Seite wurde von einem Unbekannten gehackt. Schuld war hierbei unsichere Art und Weise Zugangsdaten zu überprüfen. Daher sechs Tipps zur etwas sicheren Authentifizierung
Wer seine Homepage mit einer Benutzerverwaltung bestückt hat oder bestücken will, sollte ein paar wichtige Grundregeln beachten:
1) Passwörter irreversiebel in der Datenbank ablegen. Hierfür eignet sich idealerweise eine MD5 Verschlüsselung (Diese kann nicht rückgängig gemacht werden) - Selbst wenn dem Angreifer die Datenbank in die Hand fällt, so ist es ihm nicht möglich die Passwörter auszulesen
2) Verwende nach Möglichkeit sichere Verbindungen (https). Da das aber leider mit einem Kostenfaktor verbunden ist, ist das leider nicht für jederman möglich. Hierbei werden gesendete Werte signiert. Wenn beim Transport der Daten, diese durch Dritte modifiziert werden, ist die Signatur ungültig und kann abgewehrt werden
3) Protokolliere! Jeden Versuch mitprotokollieren. Es ist oft interessant festzustellen mit welchen Benutzernamen die Leute probieren einzusteigen (Wichtig hier nicht die Passwörter mitprotokollieren, sonst könnte das dem Angreifer wieder in die Hände fallen) - Aus den getesteten Namen kann man gut lernen
4) Sichere SQL Abfragen machen. Entweder über Stored Procedures oder, wenn bei Direktabfrage evtuell vorkommende Terminatoren escapen!
Angenommen die Abfrage sieht wie folgt aus:
'select UserId from Users where Username = ' + USERWERT + ' and Password = ' + PASSWORDWERT
Lässt sich diese Abfrage ganz leicht umgehen in dem man als Benutzer und als Passwort folgendes eingibt:
' OR '1' ='1
Warum? Nun setzen wir das mal oben ein und schaun was dabei rauskommt:
'select UserId from Users where Username = '' OR '1' ='1' and Password = '' OR '1' ='1
Was bedeutet das? RICHTIG! Die Abfrage 1=1 ist immer richtig, in diesem Fall würde die UserId des erst gefundenen Benutzers selektiert werden (im Regelfall ist der erste Benutzer in der Datenbank der Administrator).
5) Gib niemals Passwörter auf deiner Website wieder - Einige setzen das Passwort bei Passwort ändern vor:
<input type=password name=OldPassword value="MEINPASSWORT"> Auch wenn man im Webbrowser nur Punkterl bzw. Sternchen sieht, im Quelltext kann man es prima auslesen. Wenn du dich an Punkt 1 hälst, ist das sowieso nicht mehr möglich - Verlange vom User immer altes Passwort, neues Passwort und Passwort bestätigen ab (auch wenns nervend für den Endanwender ist).
Übrigends ist es unter ASP.NET gar nicht möglich ein Passwort zu setzen, die Sicherheitseinstellungen verhindern dies (<input type=password name=OldPassword> wird value immer leer bleiben)
6) Verwende Passwörter die auch aus Zeichen bestehen, mit sogenannten Brutforce Tools (Das sind Programme, die einfach so lange Benutzername und Passwort ausprobieren, bis es stimmt), lässt sich schnell ein Passwort knacken - Bestehen die Passwörter aus Zeichen wird es für diese Brutforce Programme schon sehr lange dauern. Nütze dabei auch den "Deutsch-Effekt" aus. Viele Brutforce Programme werden von "Ausländern" geschrieben die kein deutsch können. Wenn du in deinem Passwort Ä, Ö, Ü, ß verwendest, hast du gute Chancen dass es nicht mittels Brutforce erspäht wird oder zumindest nicht so "schnell"
In diesem Sinne - bleibt sauber!