Ich arbeite auf einer Website und möchte Benutzeranmeldung und Sitzung erstellen. Was ist der sicherste Weg zu überprüfen, ob eine Sitzung existiert oder nicht (wie Cookie oder Sitzungsvariablenprüfung), oder eine bessere Idee, dann Sitzungen in PHP zu verwenden?sicherste Möglichkeit zum Erstellen von Sitzungen in PHP
Antwort
session_id()
kehrt t Die Sitzungs-ID für die aktuelle Sitzung oder die leere Zeichenfolge (""), wenn keine aktuelle Sitzung vorhanden ist (keine aktuelle Sitzungs-ID vorhanden).
aber das sagt Ihnen, nur wenn eine Sitzung aktiv ist oder nicht.
die meiste Zeit, ich rufe nur session_start();
am Anfang jedes Skripts (auch wenn der Benutzer nicht angemeldet ist). Bei der Anmeldung setze ich $_SESSION['user']
mit der Benutzer-ID oder einem Benutzerobjekt. beim Ausloggen, ich nur unset($_SESSION['user']);
. durch Überprüfung empty($_SESSION['user'])
kann ich überprüfen, ob jemand noch eingeloggt ist oder nicht. Tun Sie dies nicht, wenn Sie benutzerabhängige Informationen an einer anderen Stelle in Ihrer Sitzung speichern. Andernfalls kann der nächste sich einladende Benutzer Informationen erhalten, die er nicht sehen sollte (in diesem Fall verwenden Sie session_destroy();
).
aber Sicherheit? Deaktivieren Sie einfach die Session-ID-Propagierung durch die GET/POST-URL (nur Cookies), damit sie nicht in URLs enden, die zwischengespeichert oder an andere verteilt werden können (in diesem Fall wäre ein Session-Hijacking möglich). Sie können das tun, indem Sie in der php.ini session.use_only_cookies
setzen.
Es kann zusätzliche Sicherheitsprobleme geben, wenn Sie auf einem nicht vertrauenswürdigen und/oder falsch konfigurierten gemeinsam genutzten Server hosten - dies könnte dazu führen, dass andere Personen auf demselben Computer Ihre Sitzungsdaten lesen. In diesem Fall könnten Sie Ihre Sitzungsdaten in einer Datenbank speichern, indem Sie den Sitzungshandler neu schreiben. Suchen Sie einfach nach session handler mysql
auf den Intertubes, ich bin mir sicher, dass es genug fertige Lösungen gibt. und speichern Sie keine vertraulichen Informationen wie Passwörter in der Sitzung, machen Sie besser eine Abfrage, wenn Sie sie vergleichen müssen.
anders als das ... Verwenden Sie SSL/HTTPS für Login und Benutzerverwaltung, so dass keine Klartext Passwörter übertragen werden. Speichere nur pw-Hashes mit Salz in der Datenbank. Lassen Sie niemanden die Passwörter sehen (dh drucken Sie sie niemals in HTML oder E-Mails). Verwenden Sie keine auto_increment-Werte für IDs, die der Benutzer sehen kann (und daher raten kann). ok, das ist schon außerhalb des Fragenumfangs.
Hier einige Tutorials auf Session Sicherheit
- PHP Security Guide: Sessions
- Notes on PHP Session Security
- PHP Session Security - php|works 2004 (alt, aber immer noch interessant)
- PHP Session Security (PDF)
PDF-Dokument funktioniert nicht. –
"und speichern Sie keine vertraulichen Informationen wie Passwörter in der Sitzung, machen Sie besser eine Abfrage, wenn Sie sie vergleichen müssen." - Nun, ich denke, es ist schneller, eine One-Way-verschlüsselte Version des Passworts (md5 + Hash) zu speichern, und überprüfen Sie es stattdessen, um die Abfrage immer wieder auf die db Remake – Strae
wahr, aber normalerweise müssen Sie nicht überprüfen das Passwort bei jedem Seitenaufruf, nur auf # 1: Einloggen und # 2: Ändern (wenn Sie den Benutzer bitten, den aktuellen Pw anzugeben, um einen neuen festzulegen). für # 1 müssen Sie die Datenbank abfragen, und # 2 passiert nicht sehr oft, so dass der zusätzliche Overhead vernachlässigbar ist. – stefs