PHP Login-Script

  • Hallo zusammen,


    ich habe in letzter Zeit an einem Login-Script gebastelt und würde jetzt gerne ein wenig Feedback bekommen.


    Das Hauptaugenmerk liegt dabei natürlich bei der Sicherheit usw.


    Da ich keine Lust habe hier zahlreiche Dateien mit Code zu posten, habe ich das Ganze auf GitHub hochgeladen. Bitte schaut es euch also dort an.


    Gerne könnt ihr auch dort euer Feedback hinterlassen, indem ihr ein Issue erstellt, falls es euch einfacher erscheint dort auf bestimmte Codeteile einzugehen.


    Im Ordner "php" findet ihr übrigens eine SQL-Datei zum Import der Tabelle für die DB. Wer es also selber testen möchte, kann den Code bei GitHub herunterladen und dann die Tabelle mit phpMyAdmin importieren.


    Ach, ja. Ich habe gerade Probleme mit den Einrückungen der config.php auf GitHub. Das sieht aktuell ziemlich chaotisch aus. Beheben könnt ihr das, indem ihr als URL-Parameter ?ts=2 anhängt.


    Dann sollte es wieder richtig eingerückt sein.



    Ok, nun zur Frage:


    Wir ihr seht, habe ich die Verbindung mit der Datenbank in eine extra Datei verlegt, die ich dann einbinde. Das Problem ist, dass diese Verbindung dann aber in den Funktionen der functions.php natürlich nicht verfügbar ist. Auch wenn ich die Datenbank-Verbindung ebenfalls in der functions.php einbinde, hilft das verständlicherweise nicht. Habt ihr Ideen wie ich verhindern kann, dass jede Funktion, die auf die DB zugreift, selber die Verbindung als Parameter mitgegeben bekommen muss?


    Mir fällt irgendwie nichts Gutes ein.



    Gut, das war's. Ich danke euch schon mal im Voraus für das Feedback. :)


    Gruß
    JR Cologne

  • Ohne Deinen Code gesehen zu haben:


    Du kannst eine Klasse nutzen, die eine static method hat.
    Hier im Forum haben wir 2 Beispiele dazu: http://www.html-seminar.de/html-css-php-forum/index.php?form=Search&searchID=1007180&highlight=einfache+datenbank+klasse



    Falls Du Dich nicht mit Klassen auskennst, dann kannst Du auch die Datenbank verbindung in eine Variable setzen,
    und in der Funktion (dort, wo du die Verbindung brauchst) nutzt Du:
    In etwa so:

  • Hat einwandfrei funktioniert.


    Hast du oder auch jemand anderes noch weiteres Feedback?


    Gegen SQL-Injections und XSS-Attacken sollte ich gerüstet sein. Wie sieht es mit der Sicherheit des Logins aus?


    Ich gebe ja einfach nur ein Boolean in die Session, der mir dann sagt, ob der User eingeloggt ist. Ist das nicht auch eine mögliche Sicherheitslücke? Ich meine schon mal gehört zu haben, dass man Sessions manipulieren kann.

  • Nicht wirklich.
    Eine Session wird auf der Platte des Servers abgelegt.
    Wenn Du in die Session ein TRUE rein steckst, dann steht das in dem File.
    Das File hat die Session Id (plus noch was anderes, kann mich nicht mehr erinnern) als Dateinamen.
    Such mal in Deiner php.ini nach session. Da müsste irgendwo der Pfad stehen, wo die Sessions abgelegt werden.


    Du kennst sicherlich die SID= in urls. Das sind die Session Ids. (http://php.net/manual/de/session.idpassing.php)
    Entweder wird die Session so vom user zum Server übertragen, oder per cookie.


    Der Server bekommt also die Session Id, sucht das File und lädt es.
    Eine Manipulation des Inhalts ist (meines Wissens nach) nicht möglich.
    Die Session Id kann allerdings "gestohlen" werden (siehe google php Session Hijacking).


    Wer auch immer die Session Id hat, bekommt im Script dein True gesetzt.

  • Ok, gut. Dann war vermutlich das Session Hijacking das, was ich im Kopf hatte.


    Werde mich dann generell vielleicht nochmal ein wenig mehr
    in das Thema Sicherheit einlesen, aber ich denke, ich bin da eigentlich schon ganz gut dabei. :)


    Danke dir nochmal für die Hilfe.