CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
20.02.2009, 10:24:33
|
Anfänger
|
|
Registriert seit: Nov 2007
Beiträge: 35
|
|
Bruteforce verhindern (IP-Check)
Hallo,
Ich möchte meine Login-Seiten gerne gegen Bruteforce-Angriffe schützen. Dabei denke ich daran, einfach nach maximal 10 fehlgeschlagenenen Login-Versuchen diese IP-Adresse für zB zwei Stunden zu sperren.
Dazu müsste ich die IP-Adresse des 'bösen' speichern und bei jedem neuladen der Login-Seite prüfen, ob die IP-Adresse eines 'bösen' jetzt gerade anfragt. Wenn ja, bekommt er nur noch einen kurzen Hinweis es später wieder zu versuchen.
Ich will aber nicht die Datenbank mit IP-Adressen-Checks belasten. Irgendwie sollte es was schnelleres geben. Soll ich jedesmal eine Datei einlesen und den Inhalt parsen? Hat da jemand eine performante Idee, wo der Check nicht selbst gleich einem DOS Angriff gleichkommt?
Leider kann man in PHP ja nicht ein Array persistent über alle Verbindungen und Apache-Tasks aufrecht erhalten. Das wäre natürlich perfekt für sowas...
Kukulkan
|
20.02.2009, 10:56:46
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
Zitat von Kukulkan
[...] nach maximal 10 fehlgeschlagenenen Login-Versuchen diese IP-Adresse für zB zwei Stunden zu sperren.
|
u.u. keine gute idee:
1. bei einigen ISPs ändern sich die dynamisch vergebenen IPs im laufe der sitzung
2. hinter einer IP kann ein ganzes netzwerk stecken
Zitat:
Zitat von Kukulkan
Ich will aber nicht die Datenbank mit IP-Adressen-Checks belasten. Irgendwie sollte es was schnelleres geben. Soll ich jedesmal eine Datei einlesen und den Inhalt parsen?
|
ob das nun so viel performance frisst... imho gehören db-abfragen bei einer web-app nunmal dazu. dass man die anzahl der queries klein halten sollte... ok. davon mal abgesehen, sollte der zugriff auf eine datei performenter sein.
Zitat:
Zitat von Kukulkan
Leider kann man in PHP ja nicht ein Array persistent über alle Verbindungen und Apache-Tasks aufrecht erhalten.
|
das hat weniger mit php als mit dem verwendeten protokoll (http) zu tun .-
cx
|
20.02.2009, 14:06:44
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
Leider kann man in PHP ja nicht ein Array persistent über alle Verbindungen und Apache-Tasks aufrecht erhalten. Das wäre natürlich perfekt für sowas...
|
Natürlich geht das, wenn man nur ernstlich will(und den passenden Server hat).
Zumindest kann man es auf jedem System mit Dateien simulieren.
So:
Aber ich muß cortex da zustimmen. IP Checks bringen nix und nerven die Besucher nur.
Meinst du wirklich ernsthaft, ein Angreifer würde seine eigene IP preisgeben?
Nee.. der kommt jedesmal über einen anderen Proxy, und das 4000 mal pro Sekunde.
Ich wende meist folgendes Verfahren an: - Ohne vorhandenes Session Cookie, gibts schon mal gar kein login Formular
- Jedes (auch Login)Formular bekommt einen uniqueKey, welcher auch in Session abgelegt wird
- Bei jedem Login Versuch sleep(2) egal ob erfolgreich oder nicht
- fehlerhafte Logins werden geloggt (ohne Passwort)
- Wenns den User gibt, und nur das Passwort falsch ist, wird beim User ein Zähler hoch gesetzt. Bei fehlerhaften 5 Versuchen wird der User für begrenzte Zeit gesperrt. Der User bekommt eine (passwort vergessen?)Mail mit Freischaltcode.
Daran beißen sich Bots die Zähne aus!
Ein Angreifer, welches auf diese Verfahren stößt, und es mal händisch testet merkt, dass an der Stelle Hopfen und Malz verloren ist. Er wird sich leichter angreifbaren Dingen zu wenden.
Geändert von DokuLeseHemmung (20.02.2009 um 14:07:12 Uhr)
|
20.02.2009, 14:24:30
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
Zitat von DokuLeseHemmung
[...] Aber ich muß cortex da zustimmen [...]
|
das muss ich im kalender anstreichen .-p
Zitat:
Zitat von DokuLeseHemmung
Ohne vorhandenes Session Cookie [...]
|
dito.
Zitat:
Zitat von DokuLeseHemmung
Jedes (auch Login) Formular bekommt einen uniqueKey, welcher auch in Session abgelegt wird
|
kein schlechtes ding hinsichtlich CSRF. gibt's einen mehrwert hinsichtl. brute force ?
Zitat:
Zitat von DokuLeseHemmung
Bei jedem Login Versuch sleep(2) egal ob erfolgreich oder nicht
|
macht sinn - auch bei register-forms (abtasten bereits vergebener user-names). noch besser ist es, die zeitspanne nicht-linear zu vergrössern.
Zitat:
Zitat von DokuLeseHemmung
Der User bekommt eine (passwort vergessen?) Mail mit Freischaltcode.
|
gute idee hinsichtl. usability - habe ich bisher aus blanker faulheit nicht integriert .-
Zitat:
Zitat von DokuLeseHemmung
Ein Angreifer [...] wird sich leichter angreifbaren Dingen zu wenden.
|
die hoffnung stirbt zum schluss.
cx
|
20.02.2009, 14:35:28
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
das muss ich im kalender anstreichen .-p
|
Wenn es doch so ist?
Das macht meinen Zacken in der Krone nix aus, die sitzen sowieso an Stellen, wo sie kaum einer vermuten würde.
Zitat:
gibt's einen mehrwert hinsichtl. brute force ?
|
Wenig!
Ist halt mein standard Verfahren um doppelposting zu verhindern. Ausserdem zwingt es den Angreifer Cookies zu verwalten und jedesmal das Formular zu scannen. Also nicht mehr als eine zusätzliche Hürde.
|
20.02.2009, 19:00:47
|
Anfänger
|
|
Registriert seit: Nov 2007
Beiträge: 35
|
|
AW: Bruteforce verhindern (IP-Check)
Danke, das macht alles Sinn.
Ich hatte bereits ein Sleep 3 nach jedem Login-Versuch drinnen. Das kam mir aber zu wenig vor.
Ich dachte, dass die IP-Filterung wenigstens die Script-Kiddies davon abhält...
Was haltet Ihr davon, wenn das <input...> Feld für Username und Passwort jedesmal einen neuen Namen (Zufall) bekommt, den ich lokal in der SESSION abspeichere? Ist das für Scripte ein Problem?
Kukulkan
|
20.02.2009, 19:17:53
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
Ich dachte, dass die IP-Filterung wenigstens die Script-Kiddies davon abhält...
|
Falsch gedacht!
Jeder Angreifer, selbst der dümmste, wird das Proxy Konzept kennen.
Zitat:
Ist das für Scripte ein Problem?
|
Nein!
Da ja die Anordnung erhalten bleiben muß, wegen dem "Prinzip der geringsten Verwunderung". Ausserdem zerstörtst du damit die Autovervollständigung der Browser.
Oder willst du unbedingt deine Besucher verärgern.
Geändert von DokuLeseHemmung (20.02.2009 um 19:21:43 Uhr)
|
20.02.2009, 21:39:35
|
Anfänger
|
|
Registriert seit: Nov 2007
Ort: Flörsheim a.M.
Alter: 69
Beiträge: 144
|
|
AW: Bruteforce verhindern (IP-Check)
Nabend,
-> war schon mal hier im Forum eine Idee ...
beim Login-Formular ein "unsichbares Feld" mittels css einbauen und prüfen, ob etwas eingetragen wurde (... und wenn ja .... weiterleiten). Ein Mensch kann ja nichts eintragen :)
Habe das bei einem Kontaktformular mal probiert ... könnte gut funktionieren ... ist aber noch nicht online getestet.
Gruss Reinhard
|
21.02.2009, 12:48:03
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
Zitat von DokuLeseHemmung
Ausserdem zerstörtst du damit die Autovervollständigung der Browser.
|
überraschenderweise nicht bei allen browsern. zumindest der SRWare Iron scheint sich nicht daran zu stören.
bei mir sieht eine login-maske so aus:
HTML-Code:
<form action='/index.php' method='post' accept-charset='iso-8859-1'>
<fieldset>
<legend>Login</legend>
<input type='text' name='inp_login_12b0e0e' value='' id='inp_login_12b0e0e'>
<label for='inp_login_12b0e0e' class='bottom'>Benutzername</label>
<input type='password' name='inp_login_20000b1' value='' id='inp_login_20000b1'>
<label for='inp_login_20000b1' class='bottom'>Passwort</label>
<input type='submit' name='subm_login_confirm' value='login'>
</fieldset>
</form>
der suffix von inp_login_ wird bei jedem request dynamisch vergeben...
cx
|
21.02.2009, 13:10:41
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Bruteforce verhindern (IP-Check)
Zitat:
Zitat von DokuLeseHemmung
Da ja die Anordnung erhalten bleiben muß, wegen dem "Prinzip der geringsten Verwunderung".
|
habe übrigens nicht verstanden, was dieses prinzip mit den dynamischen namen der input-felder zu tun haben soll...
Zitat:
Zitat von DokuLeseHemmung
Ausserdem zerstörtst du damit die Autovervollständigung der Browser.
|
das kann auch teil des sicherheistkonzeptes einer app sein. die autovervollständigung stellt immerhin ein gewisses sicherheitsrisiko dar - denk mal an öffentlich zugängliche arbeitsstationen oder nicht-privatrechner, die der user nicht selbst verwaltet.
hatte erst gestern folgendes gespräch - sinngemäsz:
sie: "nee, ich kann den firefox nicht benutzen."
ich: "hm, wieso nicht?"
sie: "ich weiss das passwort für web.de nicht mehr; im internet explorer komme ich da automatisch rein."
ausgesprochene experten wie stefan esser empfehlen (auch) aus diesem grunde die skriptseitige unterbindung der autovervollständigung wie zuvor gezeigt.
cx
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:58:00 Uhr.
|