PHP Sichere Sessions in AJAX Anwendung

gopeter

Lieutenant
Registriert
Okt. 2006
Beiträge
576
Hi zusammen,
ich entwickle gerade eine Art Agentursoftware als Webanwendung (Zeiterfassung, Todo-Management, Newsletter, etc pp). Da spielt die Sicherheitsfrage natürlich eine große Rolle. Ich hab mich die letzten zwei Tage auf unzähligen Seiten über Session Sicherheit (und Sicherheit im allgemein) eingelesen, bin mir aber noch nicht wirklich sicher, ob ich das jetzt richtig aufgenommen habe.

Der Login wird über ein klassisches Affenformular realisiert:

PHP:
WENN Session-Variable "logged_in" == true
	ZEIGE Webanwendung
WENN Session-Variable "logged_in" != true
	ZEIGE Login Formular

Die Seite besteht nur aus einer einzigen index.php, der Rest wird über Ajax reingeladen.

Um Session Fixation, Hijacking und sonstigen Kram auszuschließen, habe ich folgende Mechanismen verbaut:

1. in der index.php werden folgende Werte festgelegt:
PHP:
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', true);

Frage dazu: müssen diese Werte bei jeder Seite, die geladen wird (z.b. "zeiterfassung.php") eingebunden werden? Ich hab hier und da unterschiedliche Meinungen gehört, bin momentan aber noch der Meinung, dass es ausreicht, diese Werte in der index.php festzulegen. Oder doch gleich über eine php.ini?

2. nach dem Einloggen wird die Session ID neu erstellt.
Das geschieht mit Hilfe von

PHP:
session_regenerate_id();

Frage dazu: Sollte die ID nach jeder Aktion neu generiert werden? Wenn ich zum Beispiel von der Userverwaltung zur Statistik wechsle, etc?

3. Die Applikation wird nur über https:// erreichbar sein.

Ich glaube mit diesen drei Maßnahmen sollte die App relativ gut abgesichert sein. Oder? Habe auch gelesen, Benutzer über eine Session-Datenbank an ihre IPs zu binden etc. Da das Ding aber wie gesagt eine Agentursoftware darstellt und im Büro oftmals mehrere Leute dieselbe IP haben, wäre dies ein bisschen unsinnig. Hat sonst noch wer Vorschläge?

Ansonsten wurden selbstverständlich gängige Methoden eingehalten, wie z.B. Datenbankaufbau über PDO und Prepared Statements, verschlüsselte Passwörter, etc pp...
 
Dudasolid schrieb:
Die Seite besteht nur aus einer einzigen index.php, der Rest wird über Ajax reingeladen.
Sicher, dass das ne gute Idee ist? AJAX mag ja toll sein, um einzelne Inhaltselemente wie Bilder nachzuladen oder um einen Chat zu basteln, nicht aber um eine Navigation zu realisieren. Der Aufwand, den du da betreiben musst, um so elementare Sachen wie die Zurück- und Vorwärts-Buttons des Browsers zu realisieren, ist gewaltig... Da schreibst du dann 10000 Browser-Hacks, die beim nächsten Update nicht mehr laufen.

Außerdem würde eine klassische Lösung mit index.php?site=SeitenAlias_oder_ID dir viel Ärger ersparen.
1. in der index.php werden folgende Werte festgelegt:
PHP:
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', true);
Das müsste doch auch über die .htaccess funktionieren... Problem gelöst. Da musste weder darüber nachdenken, wie oft du ini_set rufst, noch musst du an der php.ini rumpfuschen.
 
Die AJAX Funktionalität ist schon komplett implementiert. Mit wenigen Zeilen Code, Deeplinking und korrekter Back-Button Funktion. Und es läuft in allen Browsern :)

Das mit der .htaccess ist natürlich eine gute Idee!

/edit

Leider lassen sich diese Werte nicht in der .htaccess ändern.
 
Zuletzt bearbeitet:
Zurück
Oben