Sven Rautenberg: Frage zum Wiki-Artikel ‚Loginsystem‘

Beitrag lesen

problematische Seite

Moin!

Das "Hashen" eines Passwortes bzw. das Anlegen eines neuen Users gelingt mir nicht.

Den Username trage ich einfach in die .htpasswd ein, aber ich bekomme kein Passwort zu diesem User generiert.

mein Server hat PHP V5.3

Updaten! Unbedingt. Eigentlich willst du so schnell wie möglich PHP 7 benutzen - es ist doppelt so schnell. Vermutlich wird dein PHP 5.3-Code aber noch ein paar Stolperfallen enthalten bezüglich längst abgekündigter Funktionen, die in 7 endlich entfernt wurden - es könnte also nicht ganz so pflegeleicht sein. Trotzdem ist die Benutzung von PHP 5.3 unverantwortlich geworden - und angesichts der bei späteren Versionen immer noch vorhandenen Geschwindigkeitsgewinne und neuer Features hat PHP 5.3 in meinen Augen so langsam den Status eines Internet Explorers 6 - den will auch keiner mehr berücksichtigen, weil er Dinge komplizierter und ekliger macht.

Ich hab mir die Wiki-Seite mal angeschaut, und ich war jetzt nicht so vom Hocker gehauen.

Zunächst mal war die abenteuerliche Freihand-Implementierung der Password-API auffällig: Es gibt dafür ein Paket vom Autor der Password-API, wie sie in PHP 5.5 implementiert wurde, und es gibt keinen Grund, die nicht zu verwenden. Einfach einbinden - fertig.

Zweitens ist in dem Skript zum Ausliefern von Nicht-PHP-Ressourcen eine fette Sicherheitslücke, die es erlauben würde, sämtliche auf dem Server befindliche Dateien, die der PHP-Prozess lesen darf, abzufragen. Ich hab das Skript erstmal gelöscht und eine Bemerkung hinterlassen, bevor das noch irgendwo weiter zum Einsatz kommt.

Unter diesem Eindruck würde ich jetzt sagen:

Frage 1: Gibt es einen Generator womit ich für dieses Skript konforme Passwörter generieren kann? Wenn nicht, wie kann ich Passwörter selber erstellen?

Frage 2: Kann ich die Benutzerdaten auch in eine mySql DB Speichern und abfragen mit diesem Skript?

Ansonsten funktioniert alles bestens!!

Wie kannst du behaupten, dass alles bestens funktioniert, wenn die wichtigste Funktion, nämlich das Einloggen mit einem gültigen Account, bislang von dir nicht getestet werden konnte, weil du kein gehashtes Passwort eintragen konntest? Das Skript könnte komplett kaputt sein und immer nur mit Status 403 antworten.

IP-Pinning ist auch ohne weiteren Kommentar drin - da sollte man sich ganz genau überlegen, ob der Wechsel der IP eines Users einen Logout bewirken soll, oder nicht. Ich denke da zwar immer noch an Load-Balancer-Zwangsproxyfarmen mit mehrern IPs (gerüchteweise gab es die bei AOL - und im Zweifel auch bei den wichtigsten Firmenkunden), aber viel mehr noch denke ich an mobile Anwendungen mit Zwangs-NAT und dem beliebigen Wechsel der Funkzellen und der daraus eventuell folgenden IP-Wechsel, sowie auch an IPv6, bei dem der Wechsel der IP sogar ein Feature zum Schutz der Privatsphäre darstellt, und ein Rechner grundsätzlich mit mehr als einer IP gleichzeitig auf einem Netzwerk-Device arbeitet.

Ich hab mir mehr noch nicht angeschaut, aber ich bin einigermaßen sicher, dass in dem Beispielcode noch ein oder zwei weitere Überraschungen drinstecken, die man wissen und bedenken sollte.

Insofern nimm das Skript bitte als Demonstration eines Prinzips, aber nicht als kopierbaren und bei dir einsetzbaren Code. Du bist immer noch selbst verantwortlich für die Sicherheit deines Systems - und es ist tatsächlich schlauer, du machst deine eigenen kreativen Sicherheitslücken rein, die deswegen keiner findet, weil sie nur mit Kenntnis des Codes auffindbar sind, anstatt dass du öffentlich einsehbaren Code kopierst, bei dem die Lücken sich auf den ersten Schlag offenbaren.

Noch schlauer wäre es natürlich, solche Dinge von existierendem, gut auf blöde Sicherheitslücken untersuchten Code durchführen zu lassen. Wie gut sind deine PHP-Kenntnisse wirklich? Schon mit Composer gearbeitet? OOP? Es gibt zahlreiche Bibliotheken, die zum Thema Authentifizierung existieren (alle nutzen die PHP-Password-API, die im Wiki-Artikel auch benutzt wird), und für Sessions ebenfalls.

https://wiki.selfhtml.org/wiki/PHP/Anwendung_und_Praxis/Loginsystem

Grüße Sven