2009-03-25 12 views
5

Ich habe Web-Apps mit Einschränkungen für Benutzeranmeldungsversuche gesehen.Begrenzen der Benutzeranmeldeversuche in PHP

Ist es eine Sicherheitsnotwendigkeit und, wenn ja, warum?

Zum Beispiel: Sie hatten drei fehlgeschlagene Anmeldeversuche, versuchen wir es in 10 Minuten erneut !!

Antwort

2

ErläuterungDies ist eine Ergänzung zu den anderen Antworten. Verwenden eines gut implementierten Captchas neben einem Anti-Brute-Force-Mechanismus, der beispielsweise Sitzungen verwendet.
Der Fragesteller markiert dies als angenommen angenommen, dass Captchas von Maschinen unlesbar sind (sie ist fast rechts) und so bekommt es negative Punkte, weil die Leute denken, es ist keine vollständige Antwort & sie haben Recht.


auch eine gute implementiert CAPTCHA verwendet, könnte eine alternative Möglichkeit, Ihre Anwendung Sicherheit gegen Brute-Force-Angriffe auf Enpower. Es gibt eine wide variety of captcha providers kostenlos zur Verfügung, lass uns den einfachen Weg versuchen, wenn Sie es eilig haben. Bedenke bitte auch, dass es people gibt, die sagen: "Oh, nein! Dieses Captcha-Ding ist nicht sicher genug und sie haben manchmal recht!".

"Für diejenigen von Ihnen, die nicht wissen, ist ein CAPTCHA Programm, das erkennen kann, ob der Benutzer ein Mensch oder ein anderer Computer ist. Sie sind diese kleinen Bilder von verzerrtem Text, die Sie übersetzen, wenn Sie sich anmelden für Google Mail oder hinterlassen Sie einen Kommentar auf dem Blog von jemand anderem. Ihr Zweck ist es, sicherzustellen, dass jemand keinen Computer verwendet, um sich automatisch für Millionen von Online-Konten anzumelden, oder .. "ref.

+2

@aradad: Ich wäre sehr verärgert, wenn ich jedes Mal ein Captcha bekommen würde, wenn ich mich einloggen wollte. Ich denke nicht, dass es angezeigt werden sollte, bis sie wie 3 Mal scheitern, und dann geben Sie ihnen vielleicht weitere 3 Versuche, bevor Sie sie für eine bestimmte Zeit aussperren. Captchas sind nicht unzerbrechlich von Maschinen ... nur schwieriger. Ich denke, dass mein Prof über 90% von em mit seinem Skript geknackt hat. – mpen

2

Die Begrenzung, wie viele Versuche auf einer Website gemacht werden sollen, um Brute-Force-Angriffe (automatisierte Angriffe) auf Ihre Website zu verhindern. Wenn Sie diese Versuche nicht einschränken, kann ein Hacker ein Skript einrichten, um Passwörter zu erraten, bis es einen gefunden hat. Dies kann sich auf die Verfügbarkeit Ihres Webservers auswirken.

In der Regel möchten Sie den Benutzer nach 3 Versuchen (10 Minuten wie bereits erwähnt) abmelden und nach 6 oder 9 aufeinander folgenden wiederholten Versuchen aussperren, sodass der Benutzer Sie kontaktieren muss, um sein Konto freizuschalten. Dies wird dadurch erreicht, dass jemand seine Skripts ändern kann, um Ihr Zeitlimit anzupassen.

+0

so muss ich den Code implementieren, wenn die Benutzeranmeldeinformationen fehlgeschlagen ist und es nicht notwendig ist, wenn eine E-Mail-Adresse (zum Beispiel) ein ungültiges Format hat. wahr? und ist es in Ordnung, dies durch Cookies zu implementieren oder muss ich es mit dbs tun? Danke für die Antwort :) –

+0

je nachdem, wie sicher Sie Ihre Website wollen. Der beste Weg, um festzustellen, was Sie tun müssen, ist, jeden Versuch zu protokollieren ... jedes Mal, wenn sich ein Benutzer anmeldet, seine E-Mail, seinen Benutzernamen, seine IP-Adresse und ob sein Passwort richtig war oder nicht. –

+0

(Fortsetzung ..) Achten Sie darauf, das eingegebene Passwort nicht zu protokollieren. Wenn Sie einen Trend sehen, ändern Sie Ihren Code, um ihn zu berücksichtigen. Ich würde einen Tippfehler nicht als Streik gegen den Benutzer betrachten, es sei denn, die Leute beginnen damit, ihn zu missbrauchen. –

0

Ja, es ist notwendig, Konten vor hochentwickelten Brute-Force-Angriffen - wie Bots und Wörterbuchdateien - zu schützen, bis jemand versucht, das Kennwort des Kontos zu erraten.

2

Wenn Benutzer ihre eigenen Passwörter festlegen können, versuchen einige Bot/Kid, sich mit einer Liste gängiger Passwörter einzuloggen und erfolgreich zu sein. Und wenn sie keine Benutzer kennen, versuchen sie allgemeine Namen wie admin, simon, rico, etc.

Es hilft nicht, nur den Benutzer in Sitzung zu kennzeichnen, da sie nur den Cookie oder die Abfrage entfernen können param an ihrem Ende. Sie müssen eine Anzahl fehlgeschlagener Anmeldeversuche für die IP-Adresse und den Anmeldenamen angeben. Vielleicht verzeihender für die IP, da es unter vielen Benutzern geteilt werden kann.

1

Für meine eigenen Projekte habe ich eine verallgemeinerte 'floodcontrol'-Bibliothek geschrieben, die solche Dinge erledigt.

Es erlaubt mir zu spezifizieren, wie viele Versuche in X Zeit gemacht werden können.Es erlaubt in kurzer Zeit eine gewisse Anzahl von "Gnadenversuchen", so dass nur wirklich ungewöhnliches Verhalten abgefangen wird.

I Datensatz in der Datenbank ein paar Dinge:

  • Die IP-Adresse (oder die ersten 24 Bits davon)
  • Die Aktion, die (dh 'log in' versucht wurde, 'Suche', ‚Kommentar‘)
  • die Zeit des Versuchs
  • Anzahl der Versuche (Versuch Zähler)

Für jeden Versuch machten mir Abfrage für das Teil-IP hinzufügen Ress und die Aktion, und wenn ein vorheriger Versuch innerhalb eines bestimmten Zeitfensters unternommen wurde, inkrementiere ich den Versuchszähler für diesen Versuch. Wenn der Versuchszähler die erlaubte Anzahl an Grace-Versuchen überschreitet, überprüfe ich, ob der letzte Versuch innerhalb von X Sekunden stattgefunden hat, und wenn dies der Fall ist, gebe false zurück - daher wird die Aktion blockiert (und der Benutzer wird aufgefordert, X Sekunden zu warten, bevor er es versucht) nochmal). Wenn der Versuchszähler unter der Anzahl der Aktivierungsversuche liegt, gebe ich true zurück und lasse ihn gleiten.

Wenn eine Person mit der gleichen IP später kommt, wird die vorherige Anzahl der Versuche nicht abgerufen, weil es zu lange her ist.

+1

Seien Sie vorsichtig, wenn Sie die gleiche IP-Adresse in einem Netzwerk verwenden. Wenn sich 10 Personen in einer Wohnung mit einer externen IP befanden und sie versuchten, Ihre Website zu durchsuchen, wurden alle sofort ausgesperrt. –

+0

Guter Punkt. Die Anzahl der Anmeldungen sollte so hoch sein, dass die Wahrscheinlichkeit, dass Personen von normalen Anmeldeaktivitäten betroffen sind, sehr gering sein sollte. Wenn sich zum Beispiel 20 Personen mit ähnlichen IP-Adressen innerhalb von wenigen Minuten anmelden, kann es ausgelöst werden, wenn die Kulanzlogins <20 sind. – thomasrutter

+1

Mit anderen Worten, es wäre die einzige Option, die Toleranz zu erhöhen; Die IP-Adresse ist unzuverlässig, wenn es darum geht, eindeutige Personen zu identifizieren, aber im Internet ist dies fast die einzige Kennung, die Sie haben. Sie könnten jedoch auch die Zeichenfolge des Benutzeragenten berücksichtigen. – thomasrutter

7

sah ich einen kreativen Ansatz für dieses eine Mal ...

Für jeden Anmeldeversuch, dass die Sperrzeit steigt exponentiell ... ausfällt.

attempt | lockout time 
====================== 
    1 |  2s 
    2 |  4s 
    3 |  8s 
    4 | 16s 
    5 | 32s 
    6 | 64s 
    7 | 128s 
    8 | 256s 
    9 | 512s 
    10 | 1024s 

Theoretisch läßt es Benutzer einen Fehler oder zwei, aber sobald es ein „Hacker“ Versuch zu werden scheint, wird der Hacker für immer längere Zeiträume gesperrt.

Ich habe das selbst (noch) nicht benutzt, aber konzeptionell mag ich die Idee. Natürlich wird der Zähler bei erfolgreicher Anmeldung zurückgesetzt.

+2

Ich habe so etwas schon einmal implementiert, aber festgestellt, dass es nicht annähernd genug verzeihend war; manchmal vergessen die Leute wirklich ihr Passwort und müssen mehrere verschiedene Kombinationen ausprobieren - versuchen Sie vielleicht so etwas, aber stellen Sie sicher, dass die ersten 6 alle 0 sind, dann fangen Sie an, flach zu steigen. – thomasrutter

+0

ja das würde auch gut funktionieren. Die Idee ist nur, um "zufällige" Versuche des Hackereintritts zu begrenzen. Ernste Systeme müssten Zeichen eines Wörterbuchangriffs, Botnets, mehrfache IPs etc. berücksichtigen. – scunliffe

+1

@Mark Ich stimme zu und verstehe ... folglich müssen die Aussperrungzeiten klein beginnen und später größer werden ... 3 oder 4 fummelnd Zeiten sollten ok sein ... aber 6 oder mehr deutet normalerweise auf einen Hackversuch hin. Die Zeiten, die ich gepostet habe, waren nur zufällig ... Ich würde mich nach deinen Bedürfnissen anpassen (wenn du diese Logik verwenden würdest), z. Ich würde auch einen Link aktivieren oder eine Telefonnummer anzeigen, wo ein Benutzer anrufen und den Zähler zurücksetzen kann, falls erforderlich. – scunliffe

0

Ich denke, eine 'gescheiterten Versuche' Zähler in der DB wäre der sicherste und einfachste Weg zu gehen. Auf diese Weise kann der Benutzer sie nicht umgehen (indem er Cookies deaktiviert). Bei erfolgreichem Login natürlich zurücksetzen.

+0

Wie könnte ein Benutzer es nicht umgehen und wie würde es zwei Benutzer unterscheiden? – thomasrutter

+0

IP-Adresse natürlich. Ja, das könnte Probleme für mehrere Benutzer mit der gleichen IP verursachen ... aber wenn Sie nur ein CAPTCHA oder etwas zeigen, wenn sie ihre Versuche aufgebraucht haben, denke ich nicht, dass es ein großer Verlust ist. War das wirklich eine Abstimmungsniederlage? – mpen

+2

Sie können es immer auch mit dem Benutzernamen zählen. So dass es Benutzername + IP-Adresse getrennt ist, anstatt nur IP-Adresse. Das würde bedeuten, dass eine geteilte IP keine Probleme verursachen würde, wenn die Leute nicht für dasselbe Konto versuchen würden. Natürlich würde das verteilten Botnetzen freie Hand lassen, also warum nicht einfach die IP-Adresse komplett killt? – RonLugge

0

Das Zurücksetzen der fehlgeschlagenen Versuche nach einer korrekten Anmeldung macht das ganze System fast wertlos.

Jeder registrierte Benutzer könnte dann drei Vermutungen über das Konto und das Passwort einer anderen Person durchführen und sich dann mit seinen eigenen Daten anmelden, um den Zähler zurückzusetzen und zu wiederholen - dies kann ebenfalls automatisiert werden. So kann ein normaler registrierter Benutzer zum Beispiel Admin-Passwörter erzwingen.

Das Zurücksetzen muss vom Administrator durchgeführt werden, nicht einfach durch erfolgreiche Anmeldung.

+4

Nicht, wenn die fehlgeschlagenen Anmeldeversuche für das bestimmte Benutzerkonto gezählt werden, bei dem sich jemand anzumelden versucht. – Ren

+0

Mit einem einzigen zentralen Zähler für fehlgeschlagene Anmeldungen, wie Ihre Antwort impliziert, würde das auch bedeuten, dass wenn Sie drei Vermutungen verpassen, ich etwas warten müsste, um meine erste Anmeldung zu versuchen: / – Flygenring