PHP Session-Sicherheit

stimmen
125

Was sind einige Richtlinien für die mit PHP verantwortlich Sitzung Aufrechterhaltung der Sicherheit? Es gibt Informationen alle über das Internet und es ist Zeit, alles an einem Ort gelandet!

Veröffentlicht am 02/08/2008 um 03:41
quelle vom benutzer
In anderen Sprachen...                            


13 antworten

stimmen
88

Es gibt ein paar Dinge zu halten, um Ihre Sitzung sicher zu tun:

  1. Verwenden Sie SSL, wenn die Authentifizierung von Benutzern oder sensible Operationen.
  2. Regenerieren Sie die Session-ID, wenn die Sicherheitsstufe Änderungen (wie zB Anmeldung). Sie können sogar die Session-ID jede Anfrage regenerieren, wenn Sie es wünschen.
  3. Haben out Sessions Zeit
  4. Verwenden Sie keine Register Globals
  5. Shop Authentifizierungsdaten auf dem Server. Das heißt, keine Details nicht senden, wie Benutzername in dem Cookie.
  6. Überprüfen Sie die $_SERVER['HTTP_USER_AGENT']. Dies fügt eine kleine Barriere für Session Hijacking. Sie können auch die IP - Adresse überprüfen. Aber dies führt zu Problemen für die Benutzer , die IP - Adresse haben , ändert aufgrund von Last auf mehreren Internet - Verbindungen Ausgleich usw. (was der Fall in unserer Umwelt ist hier).
  7. Sperren Sie den Zugang zu den Sitzungen auf dem Dateisystem oder verwenden, um benutzerdefinierte Session-Handling
  8. Für sensible Vorgänge betrachten erfordert eingeloggte Benutzer ihre authenication Details wieder zur Verfügung zu stellen
Beantwortet am 11/08/2008 um 03:38
quelle vom benutzer

stimmen
15

Eine Richtlinie ist zu nennen session_regenerate_id jedesmal , wenn eine Sitzung des Sicherheitsstufe ändert. Dies trägt dazu bei Session - Hijacking zu verhindern.

Beantwortet am 02/08/2008 um 03:43
quelle vom benutzer

stimmen
11

Meine zwei (oder mehr) Cent:

  • Traue niemandem
  • Filtereingang, Fluchtausgang (Cookie, Session-Daten sind Ihre Eingabe auch)
  • Vermeiden Sie XSS (halten Sie Ihre HTML gut ausgebildet sind , werfen Sie einen Blick auf PHPTAL oder HTMLPurifier )
  • Verteidigung in der Tiefe
  • Nicht aussetzen Daten

Es ist ein kleines , aber gutes Buch zu diesem Thema: Grundlegender PHP Security von Chris Shiflett .

Wesentliche PHP Sicherheit http://shiflett.org/images/essential-php-security-small.png

Auf der Startseite des Buches finden Sie einige interessante Code-Beispiele und Beispielkapitel finden.

Sie Technik verwenden können oben (IP & Useragent) erwähnt, hier beschrieben: Wie Identitätsdiebstahl vermeiden

Beantwortet am 06/04/2010 um 17:05
quelle vom benutzer

stimmen
11

Ich glaube , eines der wichtigsten Probleme ist (die in PHP 6 angesprochen wird) register_globals. Gerade jetzt eines des Standardverfahrens zu vermeiden register_globalsist es, die verwendet werden $_REQUEST, $_GEToder $_POSTArrays.

Die „richtige“ Art und Weise , es zu tun (Stand 5.2, obwohl es ein wenig fehlerhaft ist, aber stabil , wie von 6, die bald kommt) ist durch Filter .

Also statt:

$username = $_POST["username"];

Du würdest:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

oder auch nur:

$username = filter_input(INPUT_POST, 'username');
Beantwortet am 02/08/2008 um 03:55
quelle vom benutzer

stimmen
9

Dieses Session - Fixation - Papier hat eine sehr gute Hinweise , wo Angriff kommen kann. Siehe auch Session - Fixation - Seite bei Wikipedia .

Beantwortet am 05/03/2009 um 23:33
quelle vom benutzer

stimmen
5

IP-Adresse ist nicht wirklich die beste Idee in meiner Erfahrung. Beispielsweise; mein Büro hat zwei IP-Adressen, die auf Last gewöhnungs abhängig und wir ständig auf Probleme stoßen mit IP-Adressen.

Stattdessen hat mich für den Domains auf meinem Server zum Speichern der Sitzungen in einer separaten Datenbank entschieden. Auf diese Weise niemand auf dem Dateisystem hat Zugriff auf diese Sitzung Info. Das war sehr hilfreich mit phpBB vor 3.0 (sie haben dies seit fixieren), aber es ist immer noch eine gute Idee, wie ich finde.

Beantwortet am 06/08/2008 um 21:44
quelle vom benutzer

stimmen
3

php.ini

session.cookie_httponly = 1
change session name from default PHPSESSID

eq Apache hinzufügen Header:

X-XSS-Protection    1
Beantwortet am 13/10/2011 um 03:40
quelle vom benutzer

stimmen
3

Ich habe meine Sessions wie this-

auf der Login-Seite:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);

(Phrase auf einer Konfigurationsseite definiert)

dann auf dem Header, der für den Rest der Seite ist:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}
Beantwortet am 19/07/2011 um 22:40
quelle vom benutzer

stimmen
3

Das Hauptproblem mit PHP-Sessions und Sicherheit (außer Session Hijacking) kommt mit dem, was Umwelt Sie sind in. In der Standardeinstellung PHP speichert die Sitzungsdaten in einer Datei im Temp-Verzeichnis des OS. Ohne besondere Gedanken oder Planung ist dies eine Welt lesbar Verzeichnis so alle Ihre Sitzungsinformationen ist öffentlich für jeden mit Zugriff auf den Server.

Wie bei Sitzungen über mehrere Server zu halten. An diesem Punkt wäre es besser, PHP Benutzer behandelten Sitzungen zu wechseln, wo sie Ihre bereitgestellten Funktionen zu CRUD-Anrufen (Erstellen, Lesen, Aktualisieren, Löschen), um die Sitzungsdaten. An diesem Punkt können Sie die Sitzungsinformationen in einer Datenbank oder memcache wie Lösung speichern, so dass alle Anwendungsserver Zugriff auf die Daten haben.

Ihre eigenen Sitzungen Speicherung kann auch von Vorteil sein, wenn Sie auf einem gemeinsamen Server sind, weil es Sie speichern sie in der Datenbank lassen, die Sie oft dann über das Dateisystem mehr Kontrolle haben.

Beantwortet am 03/08/2008 um 14:14
quelle vom benutzer

stimmen
3

Das ist ziemlich trivial und offensichtlich, aber achten Sie darauf, session_destroy nach jedem Gebrauch. Dies kann schwierig sein , zu implementieren , wenn der Benutzer explizit nicht aus , sich einzuloggen, so kann ein Timer eingestellt werden , dies zu tun.

Hier ist ein gutes Tutorial auf setTimer () und clearTimer ().

Beantwortet am 02/08/2008 um 04:16
quelle vom benutzer

stimmen
2

Sie müssen sicher sein, die Sitzungsdaten sicher sind. Mit Blick auf Ihre php.ini oder mit phpinfo () Sie können Sie Sitzungseinstellungen finden. _session.save_path_ sagt Ihnen, wo sie gespeichert werden.

Überprüfen Sie die Erlaubnis des Ordners und seiner Eltern. Es soll nicht öffentlich (/ tmp) oder von anderen Websites auf Ihrem gemeinsamen Server zugänglich sein.

Angenommen, Sie sind immer noch PHP-Sitzung verwenden möchten, können Sie PHP-Set einen anderen Ordner zu verwenden, indem _session.save_path_ oder die Daten in der Datenbank zu speichern, indem _session.save_handler_.

Sie könnten in der Lage sein , in der php.ini zu setzen _session.save_path_ (einige Anbieter erlauben es) oder für Apache + mod_php, in einer .htaccess - Datei in Ihrem Stammordner: php_value session.save_path "/home/example.com/html/session". Sie können es auch mit _session_save_path zur Laufzeit festgelegt () _.

Überprüfen Chris Shiflett Tutorial oder Zend_Session_SaveHandler_DbTable zu setzen und alternative Session - Handler.

Beantwortet am 18/08/2008 um 18:12
quelle vom benutzer

stimmen
2

Wenn Sie Sie verwenden session_set_save_handler () können Sie Ihre eigenen Session - Handler gesetzt. Zum Beispiel könnten Sie Ihre Sitzungen in der Datenbank speichern. Siehe die php.net Kommentare für Beispiele einer Datenbank Session - Handler.

DB-Sitzungen sind auch gut, wenn Sie mehrere Server anders, wenn Sie Datei-basierte Sitzungen verwenden Sie benötigen würde, um sicherzustellen, dass jeder Webserver Zugriff auf das gleiche Dateisystem hatte zu lesen / schreiben die Sitzungen.

Beantwortet am 09/08/2008 um 04:28
quelle vom benutzer

stimmen
2

Ich würde überprüfen beide IP und User Agent zu sehen, ob sie sich ändern

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
Beantwortet am 04/08/2008 um 22:38
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more