Schnelle und effiziente PHP Session

8

Ich habe derzeit den folgenden Code für jede Seite auf meiner Website. Könnte jemand bestätigen, ob dies eine gute Übung ist, um eine PHP-Sitzung zu beginnen und fortzusetzen?

%Vor%

Bitte beachten Sie, dass dieses Skript in jeder Seite enthalten ist.

Eine andere verwandte Frage:

Sollte ich einen benutzerdefinierten Sitzungsspeicherpfad festlegen oder sollte ich einfach den standardmäßigen Sitzungsspeicherpfad des Servers verwenden? Was sind die Vor- und Nachteile? Soweit ich das verstehe, wenn Sie keinen benutzerdefinierten Sitzungsspeicherpfad festlegen, besteht die Möglichkeit, dass Sie möglicherweise einen Konflikt auf einem freigegebenen Hosting haben. Bitte helfen Sie aufklären.

Vielen Dank im Voraus!

    
Honey Badger 12.05.2012, 05:18
quelle

1 Antwort

5

Viele Ihrer Anweisungen betreffen Einstellungen für die Sitzungskonfiguration. Diese können normalerweise entweder in die php.ini des Servers oder in die oberste Ebene .htaccess (Apache) verschoben werden.

%Vor%

Sie sollten die Sitzungen nicht so lange dauern wie Sie (Ablauf 2038); Sitzungen werden normalerweise mit Sitzungscookies verewigt (die dauern, bis der Browser technisch geschlossen ist). Wenn Sie die Funktion "An mich erinnern" verwenden möchten, sollten Sie diese zusätzlich zu Ihren Sitzungen hinzufügen, wie hier erklärt: Ссылка

Ich finde es wichtig, zwischen dem Starten einer neuen Sitzung und dem Fortsetzen einer bestehenden zu unterscheiden, insbesondere in Fällen, in denen Sitzungen nur als Teil eines Anmeldevorgangs erstellt werden. Wenn eine Sitzung nicht fortgesetzt werden kann, ist ein Fehler aufgetreten und der Benutzer sollte zurück zur Anmeldeseite (oder Startseite) geleitet werden.

PHP versteht diesen Unterschied nicht, session_start erstellt automatisch eine Sitzung, wenn sie nicht da ist, und schlimmer, wenn eine beliebige Sitzungs-ID angegeben wird; Letzteres erlaubt Session Adoption Attacken wie hier beschrieben: Ссылка - es ist auf Japanisch, du wirst es haben um es mit Ihrem Browser zu übersetzen.

Um herauszufinden, ob eine Sitzung fortgesetzt werden kann, müssen Sie jede neue Sitzung mit einem speziellen Schlüssel initialisieren (z. B. $_SESSION['_id'] = session_id() ). Wenn dieser Schlüssel gefunden wird, ist die Sitzung bereits vorhanden und Sie können sie fortsetzen. Wenn nicht, war die Sitzung entweder nicht vorhanden oder jemand versucht, Ihnen eine falsche ID zu geben.

Um eine neue Sitzung zu beginnen, sehen Sie zuerst, ob sie fortgesetzt werden kann; Wenn nicht, verwenden Sie session_regenerate_id(true) , um die Sitzungs-ID zu ändern (dies erschwert es einem Angreifer, eine Sitzung zu übernehmen).

Schließlich können Sitzungsspeicherpfade auf einem freigegebenen Server in Ihrem eigenen Benutzerordner gespeichert werden. Dies ist jedoch nur dann sinnvoll, wenn Ihr gemeinsamer Host mit einem dedizierten Benutzer pro virtuellem Host ausgeführt wird (d. h. suexec ). Andernfalls müssen Sie die Sitzungsdaten (und vielleicht auch die Schlüssel) codieren, um Ihre Sitzung vor Snooping-Angriffen zu schützen. Schauen Sie sich die Erweiterung mcrypt an: Ссылка - Sie sollten in der Lage sein, Beispiele online zu finden.

Ich hoffe, dass dies Ihre Frage mehr oder weniger beantwortet. Lass es mich wissen, wenn du denkst, dass etwas nicht stimmt.

    
Ja͢ck 12.05.2012, 06:22
quelle

Tags und Links