[OOP] Meine Anti-Brutoforce Login-Klasse für euch!!

firstlord18

Erfahrenes Mitglied
Hallo,

naja, ich habe mir vorgenommen, OOP zu lernen. Kurzerhand habe ich eine Login Funktion geschrieben! Das Zip-Archiv ist im Anhang! Kritik, Bugreports, Verbesserungsvorschläge etc, bitte hier!

Hier der Readme-Ausschnitt aus login_class.php:

PHP:
 /********************************************************
  *
  * 
  * Login_class.php Version 1.3
  * (28.10.2005)
  * 
  * Known Bugs:
  *    -  non
  *   
  * ToDO:
  *    -  Nichts. Aber nicht zögern, mir zu schreiben
  *       falls Ihr Wünsche etc habt!
  *
  ********************************************************
  * 
  * Dieses Script darf frei kopiert und modifiziert
  * werden! Der Hinweiß auf den Autor darf nicht
  * entfernt werden! 
  *
  ********************************************************
  *
  * 
  * Features:
  *    -  einfache Installation
  *    -  Supervisor, welcher direkt in dieser Datei
  *       angepasst werden kann! Hat immer Zugriff 
  *         als Admin!
  *    -  Benutzung von Sesseions und/oder Cookies
  *       zur Authentifizierung!
  *    -  Debugging ein- bzw ausstellbar!
  *    -  Cookie-lebensdauer festlegbar!
  *      -  Cookiename einstellbar!
  *    -  Maximale Anzahl an fehlgeschlagenen
  *         Logins in einer bestimmten Zeitspanne 
  *       einstellbar!
  *      -  Einfach Verwendung (Siehe Anwendungsbeispiele!)
  *    -  Bei jedem Aufruf einer Secret Area wird 
  *       überprüft, ob der User das Recht hat, die Page
  *       zu sehen!
  *    -  Bestimmte Bereiche festlegbar, welche nur 
  *       Admins sehen dürfen!
  *    -  Falls ein User ohne Authentifizierung eine
  *       geschützte Seite aufruft, wird das Login
  *       Formular auf dieser Seite angezeigt und
  *       er ist danach auch direkt auf dieser Seite!
  *    -  Anti-Hacker Schutz mit Simulierung einer
  *       variablen Antwortzeit des Servers, um Massen-
  *       requests zu blocken!
  *
  ********************************************************
  *
  * Installation:
  *    -  Die Variablen unter diesem Kommentar anpassen!
  *    -  Es werden nur 2 MySQL tabellen benötigt. Die 
  *       install.php ausführen (es werden nun die Tabellen 
  *       angelegt), und danach unbedingt LÖSCHEN!
  *    -  Als Supervisor einloggen (Daten können in dieser
  *       Datei geändert werden ($cfg['user'],$cfg['pass']))
  *       und neue User/Admins erstellen!
  *
  ********************************************************
  *
  * Verwendung:
  *    -  Bitte die Datei login_class.php am Anfang der 
  *       Seite einbinden! z.b. require_once('login_class.php');
  *    -  In eine Seite mit geschütztem Inhalt folgendes einfügen,
  *       um den User zu überprüfen! Falls die Überprüfung
  *       fehlschlägt, wird das Formular angezeigt:
  *
  *             ********** CODE: ***********
  *             if( !($auth->may_person_view()) ) {
  *                $auth->show_redirect_form();
  *                exit();
  *            }
  * 
  *     -  Bitte die Datei admin.php in das Verzeichnis
  *        der zu schützenden Seite kopieren!
  *     -  Falls man Admin Rechte hat, bekommt man ein Link
  *        zu admin.php angezeigt, wo ma User erstellen
  *        und löschen kann! 
  *       -  Admin Bereiche lassen sich wie folgt schützen:
  *
  *           ********** CODE: ***********
  *            if( $auth->secureAdmin() ) {
  *                // ...Admin Bereich
  *            }    
  *
  *      -  Der Logout wird wie folgt aufgerufen:
  *             $auth->doLogout(); 
  *
  *      -  Also nochmal ein ganzes Beispiel:
  *
  *          <?php
  *            include('login_class.php');            
  *                    
  *            if( !($auth->may_person_view()) ) {
  *                $auth->show_redirect_form();
  *                exit();
  *            }    
  *
  *          // Ab hier fängt der Bereich an,
  *          // den eingeloggte User/ Admins sehen:
  *
  *            if($_GET["kill"] == "yes")
  *                $auth->doLogout();
  *                
  *            echo "Hallo User!";        
  *
  *            if( $auth->secureAdmin() ) {
  *                // Diesen Bereich zwischen den
  *              // geschweiften Klammern sehen nur
  *              // Admins!
  *            
  *            }
  *            
  *            // Das hier sehen nun auch wieder die
  *          // Normalen User:
  *
  *          // Link zum Logout!
  *          echo "<br><a href='?kill=yes'>logout!</a>";
  *            ?>
  *
  ********************************************************
  *
  * Bei Fragen, Kritik, Lob, Verbesserungsvorschlägen,
  * Bugreports etc, bitte entweder eine Email an mich
  * oder im ICQ melden, oder auf asd vorbeischauen!
  *
  * Und nun viel Spaß bei der Benutzung!
  *
  ********************************************************/
EDIT: NEUE VERSION 1.2:
PHP:
 <?php
  /********************************************************
  * CHANGELOG:
  *    v1.1 to v1.2:
  *    -  Man kann festlegen, ob man Notices angezeigt 
  *       haben möchte, oder nicht!
  *    -  Überprüfung auf install.php, sodass das Script
  *       nicht läuft, wenn man diese nicht gelöscht hat!
  *    -  Die install-Funktion wurde aus der Klasse entfernt
  *       und ist nur noch in der install.php enthalten
  *    -  Bugfix im SQL der Fkt db_install() wurde behoben!
  *    -  Alle Notices entfernt!
  *
  *********************************************************/
 ?>
EDITENDE

Edit²
Neue version 1.3, Changelog:
PHP:
  /********************************************************
  * CHANGELOG:
  *    v1.2 to v1.3:
  *    -  Bei Cookiebasiertem Login werden die Daten nun 
  *       in nur einem Cookie gespeichert! Dazu werden sie
  *       zu einem String zusammengefügt, getrennt durch einen
  *       Seperator!
  *    -  Cookie-String-Seperator lässt sich einstellen.
  *    -  Pfad, in dem Cookie gilt, lässt sich nun auch
  *       bei den $cfg - Variablen anpassen!
  *    -  kleinen Bugfix. PHPSESSID-Cookie wird nun nur
  *       gelöscht, falls Sessions aktiviert sind!
  *    -  Weitere Notices behoben!
  *
  *********************************************************/
 ?>
Editende!


Ich hoffe, es gefällt euch!
Und für mein erstes Projekt find ich das ganz ordentlich!

mfg
björn


p.s.: ich habe von keinem einzigen anderen Login Script abgeschaut :)
 
Zuletzt bearbeitet:
Hallo!

Und warum machst Du nicht gleich ein Tutorial daraus?
Hier in der PHP Ecke wird es sicherlich bald unter den vielen anderen Threads untergehen.

Gruss Dr Dau
 
Hm, wenn einfach ein paar hier Lob, Kritik und Bugreports postren, dann geht das sicher nicht allzuschnell unter.
Naja Tutorial, ich weiß nicht!
Das ist denk ich etwas zu schwer, denn oft weiß ich garnicht, wie ich genau ausdrücken soll, was un wie ich etwas meine!
Gibt es hier nicht auch ne Codeschnipsel Sectiopn, wo sowas nicht so schnell untergeht?
 
firstlord18 hat gesagt.:
.....Gibt es hier nicht auch ne Codeschnipsel Sectiopn, wo sowas nicht so schnell untergeht?.....
Ja, in der Tutorial Ecke.
Aber als "Codeschnipsel" dürfte es wohl "etwas" zu umfangreich sein. ;)
Du musst ja nicht unbedingt alles Schritt für Schritt erklären, es sollte auch genügen wenn Du an der einen oder anderen Stelle ein Kommentar einfügst, wo steht was in dem Abschnitt den überhaupt geschieht.
Schaue dir doch mal die anderen Tutorials an..... als kleine Anregung.
 
Edit lesen bildet , so 3. Anlauf hab eben den Eintrag gefunden wo ich die Namen angebe zu Beginn, dennoch finde ich die Fehlermeldung die einen zu Beginn um die Ohren fliegt etwas unschön.
 
Zuletzt bearbeitet:
naja, hast du eventuell meine readme gelesen?
da steht doch, dass man sich als erstes mit dem Supervisor Username und Passwort (welches im Script selbst oben angepasst wird) einloggt, und dann neue User erstellt! Man muss garnix an der DB machen.
Außerdem kannste ja auch einstellen, dass du gerne 100 failed Logins erlaubst, dann kannste wieder einloggen!
Nur eben die Readme ma bissi lesen!

edit zu deinem nachtrag: Waurm am Install Script arbeiten? es legt einfach keinen User an, ganz einfach!

edit zu deinem edit
: welche fehlermeldung? wenn du einfach nur die install ausfürhst, und dich danach mit dem supervisor user & Passwort einloggst, dann kommt doch keine Fehlermeldung!? Beschreibe bitte ganuer, was du meinst!
 
Zuletzt bearbeitet:
Ich habe das Script jetzt nicht getestet.
Kommentare sind aber ja schon genug drin.
Wenn Du es als Tutorial veröffentlichst, solltest Du evtl. noch dazu schreiben dass es Fehler enthalten könnte und nur als "experimentel" anzusehen ist.
Auch solltest Du dazu schreiben was für Voraussetzungen gestellt werden..... MySQL Version, PHP Version, Rootrechte auf die Datenbank (?) und ob bestimmte Einstellungen in der php.ini vorgenommen werden müssen.
Wenn ich es richtig sehe, ist es nicht nur einfach ein Login, sondern auch einer Userverwaltung..... Du solltest also evtl. noch näher drauf eingehen welchen Verwendungszweck das Script hat.
 
Jop nun klappte es , nur die Fehlermeldungen sind nervig , naja sind keine Fehlermeldungen im dem Sinne sonderen eher ne Notiz das ein Index nicht existiert.

Aber davon fliegen mir ein haufen um die Ohren :
Code:
/* admin.php */

Notice: Undefined index: loginuser in C:\www\login_class\login_class.php on line 753

Notice: Undefined index: loginpass in C:\www\login_class\login_class.php on line 753

Notice: Undefined index: user in C:\www\login_class\login_class.php on line 759

Notice: Undefined index: pass in C:\www\login_class\login_class.php on line 759

Notice: Undefined index: checkit in C:\www\login_class\login_class.php on line 493

Notice: Undefined variable: logged_in in C:\www\login_class\login_class.php on line 522

dann noch :

wenn ich eingeloggt bin.
Code:
Notice: Undefined index: kill in C:\www\login_class\admin.php on line 9

Notice: Undefined index: action in C:\www\login_class\admin.php on line 15

Notice: Undefined index: action in C:\www\login_class\admin.php on line 32

Diese kommen bei jedem Formular , letzteres also das wenn ich im Adminbereich bin kommt nicht sobald ich mich über die Beispiel Seite einlogge.Wenn ich den Admin Bereich öffne dann erscheint es dort ebenfalls.

Des Undefind index: kill steht irgendwie ewig und geht gar nicht weg.

Schönheitsfehler würde ich sagen und es macht sich nicht unbedingt gut wenn sowas in der Homepage aufploppt.Kann man zwar locker mit einen @ Zeichen unterdrücken aber man sollte es ja vermeiden das Zeichen zu nehmen.

Erweiterungen würde ich noch die Wahl des automatischen Logins vorschlagen , so das der User wählen kann ob er das nächste mal automatisch eingeloggt werden möchte.So wie mir scheint geschiet das momentan automatisch.

Noch ein Punkt bei den Cookies , warum speicherst du 2 Cookies ab einer würde vollkommen reichen indem du das passwort und den Namen zusammenfügst als Text.
Oder aber du speicherst es in ein Array und behandelst es dann mit serialize. Zum auslesen dann einfach unserialize nutzen wieder und dann die Array Daten lesen.

So genug kritisiert , alles in allem schon ne recht starke Leistung :)
 
Zuletzt bearbeitet:
aber er spuckt nur Notizen aus, wenn du error_reporting auf E_all stellst, doer?

Naja, das mit dem autologin ist eigentlich so gewünscht ...

und das mit den Cookies, stimmt, ich werde das mit serialize machen ;)
 
Naja du musst einfach mal davon ausgehen , das ich nun zum Beispiel an einen anderen Rechner bin , also ich bin auf der Arbeit hab gerade mal Pause und logge mich da ein dann wäre es nicht so schön wenn ich das nächste mal gleich eingeloggt werde.

Da hätte ich schon gerne die Wahl oki man kann die Cookies löschen was mit dem Opera eigentlich sehr gut geht , aber schöner wäre die Wahl. So das Tüpfelchen auf dem i , sozusagen das Sahnehäubchen :D

Ja ich habe Error Reporting All an :) Aber das hat mein Webspace auch also muss ich da mit dem gleichen rechnen und dort kann ich nicht in der php.ini rumfummeln :)

Immer davon ausgehen den dümmsten Anzunehmenden User vor sich zu haben der das Login 3 mal versaut so wie ich ;)
 
Zurück