Ich habe damit begonnen, fehlgeschlagene Anmeldeversuche auf meiner Website mit einer Nachricht wie der folgenden zu protokollieren
Failed login attempt by qntmfred
Ich habe bemerkt, dass einige dieser Protokolle aussehen
Failed login attempt by qntmfredmypassword
Ich vermute, einige Leute hatten eine fehlgeschlagene Anmeldung, weil sie ihren Benutzernamen und ihr Passwort in das Feld Benutzername eingegeben haben. Passwörter sind in der Datenbank gehasht, aber wenn die Datenbank irgendwie kompromittiert wurde, können diese Protokollnachrichten eine Möglichkeit für einen Angreifer sein, Passwörter für einen beliebigen kleinen Prozentsatz von Personen zu ermitteln, bei denen eine Anmeldung wie diese fehlgeschlagen ist.
Gibt es eine bessere Möglichkeit, damit umzugehen? Sollte ich mir überhaupt Gedanken über diese Möglichkeit machen?
quelle
Antworten:
Versuchen Sie es wie folgt:
Wenn der Benutzername existiert, melden Sie "fehlgeschlagener Anmeldeversuch von
username
". Wenn nicht, melden Sie sich123.45.67.89
stattdessen mit "Fehlgeschlagener Anmeldeversuch von IP " an. Damit sollte das Problem behoben sein, dass Passwörter versehentlich im Protokoll angezeigt werden.quelle
Warum nicht einfach prüfen, ob ein solcher Benutzername in der Datenbank vorhanden ist? Dies lässt Sie mit 2 möglichen Ergebnissen zurück.
Der Benutzer hat einen korrekten Benutzernamen eingegeben. Sie können dann einfach protokollieren, was Sie jetzt protokollieren.
Der Benutzer hat sein Passwort in das Feld Benutzername eingegeben. Daher ist der Benutzername ungültig. Geben Sie einfach einen Protokolleintrag ein, der besagt, dass der Anmeldeversuch eines nicht identifizierten Benutzers fehlgeschlagen ist.
Und natürlich können Sie ein zusätzliches Feld haben, um IP, Datum und was nicht zu protokollieren?
quelle
Überlegungen:
Können Sie feststellen, wann dies passiert ist, anstatt dass jemand seinen Benutzernamen falsch eingibt? Die Protokollierung von Benutzernamen mit falscher Schreibweise kann für Supportzwecke nützlich sein, z. B. wenn Sie die Frage "Warum kann ich mich nicht anmelden?" Mit der Antwort "Sie haben Ihren Benutzernamen falsch eingegeben, der Bindestrich sollte kein Punkt sein" oder "Sie haben einen vorangestellten Doppelpunkt dann Leerzeichen - hast du es ausgeschnitten und eingefügt ". Wenn Sie eine kleine Anzahl von hochbezahlten Benutzern haben (dh noch keine andere Social Networking-Site), müssen Sie wahrscheinlich diese Art von Support bereitstellen.
Was ist die geeignete Maßnahme, wenn jemand dies tut? Benutzernamen können ein Hinweis auf Hacking-Versuche sein. Die Tatsache, dass der Benutzername nicht in Ihrer Liste erscheint, bedeutet nicht, dass Sie nicht wissen müssen, was er war. Wenn Sie jedoch der Meinung sind, dass dies ein ernstes Problem ist und Sie feststellen können, wessen Passwort es war, können Sie den Benutzer dazu auffordern, sein Passwort zu ändern, nachdem dies geschehen ist.
Was ist Industriepraxis? In der Industrie ist es üblich, das Feld Benutzername, nicht jedoch das Feld Kennwort zu protokollieren. Es ist unwahrscheinlich, dass Sie dafür entlassen werden.
Sofern Sie keine ungewöhnlichen Überlegungen anstellen, würde ich empfehlen, die Branchenpraxis zu befolgen und das Feld für den Benutzernamen unabhängig davon zu protokollieren. Ziehen Sie erzwungene Kennwortänderungen als Vorschlag 2 in Betracht, wenn Sie dies für unzureichend halten.
quelle
Aus Sicherheitsgründen werden beim Anmelden in meiner aktuellen App keine Parameter gespeichert, die an Anmeldemethoden oder Methoden zum Zurücksetzen des Kennworts übergeben wurden. Der Protokollaufruf verfügt über einen optionalen Parameter, der dies steuert. Wenn dieser Parameter auf true gesetzt ist, wird das gespeicherte Parameterobjekt durch ersetzt
[Redacted]
. Klar, ich verpasse ein wenig Daten, aber ich habe ihre IP-Adressen und möchte lieber nicht riskieren, etwas so sensibles im Klartext zu bekommen.Wenn Sie wirklich so etwas protokollieren möchten, würde ich vorschlagen, dass Sie beim Protokollieren eines Anmeldeversuchs die Datenbank auf Benutzer mit einem Namen überprüfen, der mit dem im Feld Benutzername übereinstimmt, und ihn nur speichern, wenn Sie eine Übereinstimmung haben. Andernfalls speichern Sie es einfach als "unbekannter Benutzer". Sie könnten sich vorstellen, zu prüfen, ob dieser Wert das oder was auch immer enthält, aber es besteht immer das Risiko, dass Sie Kombinationen wie [User] [Password] und [UserPas] [sword] erhalten. In diesem Fall können Sie anhand der IP prüfen und daraus ableiten Sie haben versehentlich den Anfang des Passworts einer anderen Person im Klartext gespeichert. Sie können dies auf das unwahrscheinliche aber mögliche [User] [Password] und [UserPassword] [??] ausweiten. In diesem Fall wird "Fehlgeschlagene Anmeldung mit UserPassword" angezeigt, gefolgt von "Erfolgreiche Anmeldung mit User", und Sie können alle ableitendes Benutzerpassworts. Im Allgemeinen würde ich sicherheitshalber sagen, dass Benutzernamen nur dann protokolliert werden, wenn die Anmeldung erfolgreich ist.
Zum Hinzufügen bearbeiten:
Die meisten Argumente, die Leute für die Protokollierung des Benutzernamens für fehlgeschlagene Anmeldeversuche vorbringen, lassen sich meiner Meinung nach besser mit anderen Methoden behandeln.
Zum Beispiel wurde gesagt, dass wenn ein Kunde fragt, warum ich mich nicht anmelden kann, protokollierte Benutzernamen es Ihnen ermöglichen würden, Tippfehler anzuzeigen. Dies ist wahr, aber das Risiko, auch Passwörter zu fangen, ist es nicht wert. Ich würde dies tun, indem ich den Benutzer bei einem Fehler zurück zum Anmeldeformular leite, das Feld "Benutzername" hervorhebe und es mit den eingegebenen Daten erneut ausfülle, damit sie es selbst sehen können.
Ein weiteres Argument war, dass Sie damit Hacking-Versuche identifizieren können. Eine Reihe von Fehlern gegen einen Benutzernamen kann durchaus ein Versuch sein, ein Passwort zu erzwingen. Zu diesem Zweck wird in der Tabelle "Users" eine Spalte "BadLogins" angezeigt, die jedes Mal erhöht wird, wenn eine Anmeldung mit einem Benutzernamen fehlschlägt, der diesem Benutzer entspricht, und bei erfolgreicher Anmeldung auf Null zurückgesetzt wird, nachdem dem Benutzer mitgeteilt wurde, dass dies der Fall war x erfolglose Anmeldeversuche seit Ihrem letzten Login "und Ratschläge, was zu tun ist, wenn sie nicht glauben, dass die Versuche von ihnen stammen. Wenn Sie wirklich gründlich sein möchten, können Sie eine weitere Spalte haben, in der der letzte Wert der BadLogins-Spalte auch nach der erfolgreichen Anmeldung gespeichert ist, und / oder eine Spalte, in der der bisher höchste Wert dieser Spalte gespeichert ist, und / oder eine Spalte, in der dieser Wert gespeichert ist Speichert die Gesamtzahl der fehlgeschlagenen Anmeldungen, die dieses Konto jemals hatte.
quelle