Web-Anwendung soll nur 3 Login-Versuche haben

Registriert
Sep. 2002
Beiträge
223
Hallo zusammen,

Ich habe folgendes Problem:
Ich habe eine Webandendung mit dem JAVA-Struts-Framework entwickelt.
Diese soll auf einem Tomcat-Server laufen.
Zur Authentifikation verwende ich in der System.xml das Realm mit JNDI
Username und Passwort werden dabei in einer Datenbank gespeichert.
In der web.xml verwende ich den j-security-check. Angezeigt wird das ganze daher auf einer html-Form.

Soweit alles gut und es funktioniert auch soweit. Nun habe ich aber die Forderung bekommen, daß maximal drei Loginversuche nur durchgeführt werden sollen.
So wie ich es jetzt eingestellt habe, hat der Nutzer unendlich viele Möglichkeiten. Wie kann ich die Anzahl der Login-Versuche mit dem Tomcat begrenzen, oder geht das nicht mit dem Tomcat sonder nur mit einem anderen Webserver.
Ach so, ich verwende den Tomcat 5.5

Ich hoffe, jemand kennt sich aus und kann mir bei dem Problem helfen.

Viele Grüße

Three of Twelve
 
meine idee wäre in der DB für die users ne zusätzliche spalte rein zu tun wie oft sich der user falsch eingeloggt hat, und wenn sich der user 3x falsch einloggt muss der admin erst seinen username wieder freischalten (aka den count auf 0 setzen)
allerdings wenn sich bei unter 3 fehl-logins der user selbst einloggt wird der count wieder auf 0 gesetzt
 
Deine Idee hatte ich auch schon. So hat meine User-Tabelle zusätzlich eine Spalte für die Anzahl der Versuche und eine Spalte die den Status des Konto angibt. Das Problem ist nur, dass mir Tomcat durch das j-security-check keinen zugriff auf diese Spalten gewährt. Tomcat verwaltet selbst den Login so daß meine Klasse die eigentlich für die Authentifizierung gedacht ist überhaupt nicht ausgeführt wird. Daher meine Frage ob es eine Konfigurationsmöglichkeit gibt, oder ob dies nur mit anderen Webservern geht.

Viele Grüße

Three of Twelve
 
ok dann is das was spezifisches - kenn mich mit java und so nicht ganz so aus und dachte tomcat is für java sowas wie apache (mit plugins) für php
 
Falls der Webserver nach außen hin zugänglich ist, würde ich so etwas unterlassen, sonst kommt noch irgendein Depp auf die Idee und meldet sich jeden Tag 3 mal falsch an mit irgendeinem Benutzer.
Abgesehen davon sind 3 Fehlversuche ziemlich schnell erledigt. Beim ersten Mal glaubt man, dass man sich vertippt hat, beim zweiten Mal überlegt man, ob es nicht doch das andere Passwort war und schwupps ist man draußen, dabei war vielleicht nur Caps Lock aktiv. Ich würde das Limit mindestens auf 5, besser ist noch 10 setzen. Dann kommt man durch erraten auch nicht rein, ab es nerven nicht immer alle Leute, weil sie gesperrt sind.
 
die Anzahl (3 Versuche) ist aber eine Sicherheitsvorschrift die eingehalten werden soll.
Das Umsetzen macht mir nur probleme.
 
Wieso?

Sobald der Username X aufgerufen wird ( DB ) und das Passwort falsch ist mach einfach -1 in der Tabelle bei versuchen.

Ist es auf 0 runter muss er halt bisschen warten bis er sich wieder neu anmelden kann.
Hau einfach nen timestamp mit rein und setze diesen auf 10min oder so?

Sobald der User X sich anmelden will kommt halt nen Fehler das er sich 3mal falsch angemeldet hat und nu warten muss.

Sind die 10min um, setze den Counter automatisch wieder auf 3, dann kann er es nochmals versuchen.
 
Mit der DB würde ich nicht machen. Ich weiß zwar nicht im welchen Kontext deine Application läuft, aber jeder DB Zugriff (gerade schreiben) ist teuer. Wenn das mehrere gleichzeitig machen wäre es unnötige lasst.
Du könntest in deinem Sessionobjekt eine Variable halten, die bei jedem Versuch nach unten zählt. Aber kA wie deine Anwendung aufgebaut ist. Vllt liefert auch Spring Security (Acegi) ne gute Möglichkeit.
 
ich habe die Web-Anwendung mit Struts geschrieben.

Ich habe in der Web.xml j-secury-check drin. Dadurch wird von der html-Seite der Username und das Passwort übergeben. Ferner wird das j-security-check von der html-Seite als action aufgerufen. Tritt ein Fehler auf (falsches Passwort) so verzweigt die web.xml auf eine andere htm-Seite (Feilure.html). In dieser Konstellation habe ich überhaupt keinen einflußmöglichkeit. Was muß ich also in der web.xml umstellen, damit meine eigene java-Klasse anstelle des j-security-checks läuft.

Hier ein auszug aus der Web.xml

<filter>

<filter-name>FormLoginFilter</filter-name>

<display-name>FormLoginFilter</display-name>

<filter-class>

com....FormLoginFilter
</filter-class>

</filter>

<filter>

<filter-name>ProtectFilter</filter-name>

<filter-class>de...ProtectFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>FormLoginFilter</filter-name>

<url-pattern>/j_security_check</url-pattern>

</filter-mapping>

<filter-mapping>
 
Zurück
Oben