Fehlgeschlagene Logins zählen... Was ist sinnvoll?

Djinndrache

Bekanntes Mitglied
Ich umreiße das Szenario:
- Client und Server in Java geschrieben
- Am Anfang des Verbindungsaufbaus muss der Client ein Passwort schicken. Wenn dem Server das Passwort nicht gefällt, wird der Socket geschlossen. Ansonsten fängt die eigentliche Kommunikation an. Im Prinzip braucht der Client also ein Serverpasswort um sich zu qualifizieren. (Diesen Vorgang nenn ich fortan "Login")

Nun folgender Wunsch:
- Wenn ein Client (d.h. eigentlich: eine IP) in einem Zeitraum T (zB: 5 Minuten) sich X mal (zB: 3) versucht mit falschem Passwort einzuloggen, dann soll die IP für einen Zeitrum U (zB: 1 Stunde) gebannt werden.


Meine eigentliche Frage:
- Wie zähle ich X (die falschen Logins) am besten hoch?

Ein paar weitere nennenswerte Fakten:
- (!) Dies ist ein praktisches "Problem", keine Übungsaufgabe. Daher wäre eine effiziente Lösung wünschenswert, nicht einfach "irgendwas das funktioniert"
- Ban-Funktionalitäten gibt es schon. Bans werden in einer SQLite Tabelle gehandhabt (Tabelle "Bans" mit u.a. "IP", "Zeitstempel" und "Dauer")


Meine Lösungs-Ideen:
1) Da der Server eine SQLite Datenbank benutzt, könnte man eine Tabelle "FailedLogins" anlegen. Als Spalten wären insbesondere "IP", "Zeitstempel" denkbar. Dann könnte ich in mit einem SELECT COUNT(*) und einer WHERE-Kondition, die T berücksichtigt, relativ leicht an einen Wert kommen, den ich direkt mit X vergleichen kann und voilà. Mein Bedenken hierbei: Ich erzeuge viel zu viele Daten. Jeder FailLogin in die Datenbank? Muss das sein?
2) Ich könnte die IPs in eine Datei schreiben (plain-txt, xml, irgendwas). Finde ich ehrlich gesagt unsauber. Außerdem dürften potentielle DDOS-Leute Freude daran haben, wenn der Server jedes Mal in einer Datei rumliest und/oder rumschreibt.
3) Ich könnte die IPs irgendwie in einer HashMap speichern und als zweiten Wert vielleicht eine InnerClass mit Zeitstempel und Anzahl Versuche. Der Gedanke daran ist mir aber schon irgendwie unwohl.
4) Andere Ideen?



Da ich mit PHP groß geworden bin wäre meine allererste Idee gewesen den Fail-Counter in die $_SESSION zu schreiben, aber das ist ja eine ganz andere Welt... Ich brauch mal wieder Hilfe dabei reine Java-Gedanken zu bekommen ;)
 

Michael...

Top Contributor
Wenn dem Server das Passwort nicht gefällt, wird der Socket geschlossen.
Warum wird der Socket sofort geschlossen? Ich würde die Verbindung erst nach den drei ungültigen Loginversuchen schließen. In dem Kontext ließe sich die Anzahl und das Datum des letzten Verbindungsversuches leicht in Form von Instanzvariablen speichern. Erst danach oder wenn der Anwender die Anwendung und damit die Socketverbindung von sich aus schließt, würde ich IP, Timestamp usw. in einer Datenbank persistent speichern.
 

FArt

Top Contributor
Ich frage mich immer wieder, wie man auf die Idee kommt (Annahme: eine produktive Software) Kommunikation, Authentifizierung usw. selber zu programmieren. Hierfür gibt es Standards, Implementierungen und APIs.

Auf der einen Seite machst du dir Gedanken über DDoS, auf der anderen Seite wird noch handgeklöppelt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Drools: Zählen wie oft ein Wert vorkommt Allgemeine Java-Themen 1
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
A Binärer Suchbaum Knoten Zählen Allgemeine Java-Themen 4
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
J Rekursive Programmierung-Zählen von Ziffern Allgemeine Java-Themen 5
J Die Menge einer Zahl im Binärbaum zählen Allgemeine Java-Themen 7
N [stream-api] Parameter pro Typ zählen Allgemeine Java-Themen 1
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
K Wörter in Strings zählen Allgemeine Java-Themen 7
R Zusammenhängende Werte in 2-dim. Array finden und zählen Allgemeine Java-Themen 3
C Kleinbuchstaben zählen Allgemeine Java-Themen 10
P Werte in Array zählen und Summe der einzelnen Teile ausgeben Allgemeine Java-Themen 10
M Ein bestimmtes Wort in einem Text zählen (String in String) Allgemeine Java-Themen 9
B substring zählen Allgemeine Java-Themen 7
Landei Collections Word-Frequenzen zählen Allgemeine Java-Themen 7
C Mausklicks zählen (extern) Allgemeine Java-Themen 6
S Knoten zählen in einem Binärbaum Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
H Zeitraum: Arbeitstage zählen Allgemeine Java-Themen 5
J String Wörter zählen Allgemeine Java-Themen 4
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
M Anwendung nur einmal starten / Zeichen in String zählen Allgemeine Java-Themen 7
G Dateien und Verzeichnisse in einem Verzeichnis zählen Allgemeine Java-Themen 9
2 Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 2
G Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 3
G arguemente einer Methode zählen? Allgemeine Java-Themen 19
X Strings aus einer ArrayList zählen Allgemeine Java-Themen 11
B Farben Zählen Allgemeine Java-Themen 17
S Methode zum Zählen von Buchstaben in Strings gesucht Allgemeine Java-Themen 11
I vergleich und zählen von Strings Allgemeine Java-Themen 7
C Objekte einer Klasse zählen Allgemeine Java-Themen 25
T Zeilen eines Projekts zählen lassen Allgemeine Java-Themen 14
M richtiges Ergebnis zählen und übergeben? Allgemeine Java-Themen 7
F Dateien in einem Ordner zählen Allgemeine Java-Themen 15
G ziffern zählen mit rekursiver methode Allgemeine Java-Themen 2
F Zählen wie oft Methode aufgerufen wurde Allgemeine Java-Themen 2
L Häufigkeit der Werte in Datei zählen! Heap Space beschränkt! Allgemeine Java-Themen 31
F Bestimmes zeichen im String zählen Allgemeine Java-Themen 34
G Dateien zählen im Verzeichnis Allgemeine Java-Themen 11
B Integer zählen bzw. speichern Allgemeine Java-Themen 3
S lines of code zählen Allgemeine Java-Themen 9
A Buchstaben zählen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben