Suhosin zerstört PHPs Session-Management?
HarryB.
- webserver
Holladiewaldfee,
mein Provider hat vor einigen Tagen ankündigungslos Suhosin installiert. Mit der Folge, dass irgendwie das Session-Management von PHP nicht mehr so funktioniert, wie ich das gewohnt bin. Zunächst funktionierte das Login auf meiner Seite (http://www.tourenwelt.info) gar nicht mehr. Nun habe ich eine .htaccess erstellt mit
php_flag suhosin.cookie.encrypt Off
php_flag suhosin.session.encrypt Off
Der Unterschied ist, dass das Login jetzt wieder funktioniert und man auch eine gewisse Zeit angemeldet bleibt, dann aber scheinbar vollkommen grundlos die Session wieder verschwindet und man wieder ausgeloggt ist.
Hat jemand ein ähnliches Verhalten schonmal beobachtet und kennt evtl. sogar eine Lösung dazu?
In $_SESSION sind nur rund 10 Werte gespeichert, das sollte also nicht das Problem sein. Diese Werte werden auch nicht mehr verändert, wenn das Login mal funktioniert hat.
Ciao,
Harry
n'abend,
mein Provider hat vor einigen Tagen ankündigungslos Suhosin installiert.
Suhosin is a bitch™.
Und 'nen Providerwechsel würde ich nach solchen Aktionen auch ernsthaft in Betracht ziehen.
php_flag suhosin.cookie.encrypt Off
php_flag suhosin.session.encrypt Off
Wenn ich die Stunden zusammenzähle, die mir dieses mistige "SecurityPatch" schon abverlangt hat, könnte ich locker mal wieder in Urlaub gehen... :/
Konfiguriere deinen Webserver, sodass tourenwelt.info auf www.tourenwelt.info weiterleitet. Andernfalls wird deine Seite unter zwei verschiedenen Domains zur Verfügung gestellt. (Macht kein Spaß mit Cookies und SEO).
Du solltest mal alle Werte deiner suhosin Konfiguration (siehe phpinfo()) bereitstellen.
möglicherweise willst du mal simulation aktivieren?
weiterhin schönen abend...
Holladiewaldfee,
Suhosin is a bitch™.
Und 'nen Providerwechsel würde ich nach solchen Aktionen auch ernsthaft in Betracht ziehen.
Kannst Du laut sagen. Hab eh nur Ärger mit denen.
Du solltest mal alle Werte deiner suhosin Konfiguration (siehe phpinfo()) bereitstellen.
Directive Local Value Master Value
suhosin.apc_bug_workaround Off Off
suhosin.cookie.checkraddr 0 0
suhosin.cookie.cryptdocroot Off On
suhosin.cookie.cryptkey [ protected ] [ protected ]
suhosin.cookie.cryptlist no value no value
suhosin.cookie.cryptraddr 0 0
suhosin.cookie.cryptua Off On
suhosin.cookie.disallow_nul 1 1
suhosin.cookie.disallow_ws 1 1
suhosin.cookie.encrypt Off Off
suhosin.cookie.max_array_depth 50 50
suhosin.cookie.max_array_index_length 64 64
suhosin.cookie.max_name_length 64 64
suhosin.cookie.max_totalname_length 256 256
suhosin.cookie.max_value_length 10000 10000
suhosin.cookie.max_vars 100 100
suhosin.cookie.plainlist no value no value
suhosin.coredump Off Off
suhosin.disable.display_errors Off Off
suhosin.executor.allow_symlink Off Off
suhosin.executor.disable_emodifier Off Off
suhosin.executor.disable_eval Off Off
suhosin.executor.eval.blacklist no value no value
suhosin.executor.eval.whitelist no value no value
suhosin.executor.func.blacklist no value no value
suhosin.executor.func.whitelist no value no value
suhosin.executor.include.allow_writable_files On On
suhosin.executor.include.blacklist no value no value
suhosin.executor.include.max_traversal 0 0
suhosin.executor.include.whitelist no value no value
suhosin.executor.max_depth 0 0
suhosin.filter.action no value no value
suhosin.get.disallow_nul 1 1
suhosin.get.disallow_ws 0 0
suhosin.get.max_array_depth 50 50
suhosin.get.max_array_index_length 64 64
suhosin.get.max_name_length 64 64
suhosin.get.max_totalname_length 256 256
suhosin.get.max_value_length 512 512
suhosin.get.max_vars 100 100
suhosin.log.file 0 0
suhosin.log.file.name no value no value
suhosin.log.phpscript 0 0
suhosin.log.phpscript.is_safe Off Off
suhosin.log.phpscript.name no value no value
suhosin.log.sapi 0 0
suhosin.log.script 0 0
suhosin.log.script.name no value no value
suhosin.log.syslog no value no value
suhosin.log.syslog.facility no value no value
suhosin.log.syslog.priority no value no value
suhosin.log.use-x-forwarded-for Off Off
suhosin.mail.protect 0 0
suhosin.memory_limit 0 0
suhosin.mt_srand.ignore On On
suhosin.multiheader Off Off
suhosin.perdir 0 0
suhosin.post.disallow_nul 1 1
suhosin.post.disallow_ws 0 0
suhosin.post.max_array_depth 50 50
suhosin.post.max_array_index_length 64 64
suhosin.post.max_name_length 64 64
suhosin.post.max_totalname_length 256 256
suhosin.post.max_value_length 1000000 1000000
suhosin.post.max_vars 1000 1000
suhosin.protectkey On On
suhosin.request.disallow_nul 1 1
suhosin.request.disallow_ws 0 0
suhosin.request.max_array_depth 50 50
suhosin.request.max_array_index_length 64 64
suhosin.request.max_totalname_length 256 256
suhosin.request.max_value_length 1000000 1000000
suhosin.request.max_varname_length 64 64
suhosin.request.max_vars 1000 1000
suhosin.server.encode On On
suhosin.server.strip On On
suhosin.session.checkraddr 0 0
suhosin.session.cryptdocroot Off On
suhosin.session.cryptkey [ protected ] [ protected ]
suhosin.session.cryptraddr 0 0
suhosin.session.cryptua Off Off
suhosin.session.encrypt Off On
suhosin.session.max_id_length 128 128
suhosin.simulation On Off
suhosin.sql.bailout_on_error Off Off
suhosin.sql.comment 0 0
suhosin.sql.multiselect 0 0
suhosin.sql.opencomment 0 0
suhosin.sql.union 0 0
suhosin.sql.user_postfix no value no value
suhosin.sql.user_prefix no value no value
suhosin.srand.ignore On On
suhosin.stealth On On
suhosin.upload.disallow_binary 0 0
suhosin.upload.disallow_elf 1 1
suhosin.upload.max_uploads 25 25
suhosin.upload.remove_binary 0 0
suhosin.upload.verification_script no value no value
möglicherweise willst du mal simulation aktivieren?
Hab ich gemacht, dann läuft es auch wieder, aber das ist ja auch nicht Sinn und Zweck der Übung. Zudem ich das Logfile von Suhosin nicht finde...
Jetzt wirds aber noch lustiger: Ich habe festgestellt, dass nur Firefox von den zufälligen Rauswürfen betroffen ist. Mit dem IE8 hatte ich das Problem überhaupt nicht. Darauf aufbauend habe ich mein .htaccess file erweitert:
php_flag suhosin.cookie.encrypt Off
php_flag suhosin.session.encrypt Off
php_flag suhosin.cookie.cryptua Off
php_flag suhosin.cookie.cryptdocroot Off
php_flag suhosin.session.cryptua Off
php_flag suhosin.session.cryptdocroot Off
Was allerdings nichts am Ergebnis ändert, bzw. schon was ändert, nämlich dass die Rauswürfe etwas seltener passieren (kann auch Zufall sein).
Auch sehr interessant: Von drei Nutzern unabhängig beobachtet: Die Rauswurffrequenz scheint zeitlich zu variieren, gestern Abend nur selten, heute morgen andauernd.
Muß ich das verstehen?
Ciao,
Harry
Hi!
Du solltest mal alle Werte deiner suhosin Konfiguration (siehe phpinfo()) bereitstellen.
Bitte zeig auch mal die "normalen" session.*-Einstellungen. Ich weiß nicht, ob der Suhosin an Dingen wie einem gemeinsamen session.save_path beteiligt ist. Wenn jedenfalls alle Anwender ihre Sessiondaten in ein und dem selben Verzeichnis ablegen und sich jemand ein strengeres Session-Timeout konfiguriert hat, dann räumt der Garbage Collector auch alle fremden Sessiondateien nach diesem Zeitplan auf. Er unterschiedet nicht zwischen Anwendern oder gar Anwendungen des selben Nutzers.
Lo!
Holladiewaldfee,
Bitte zeig auch mal die "normalen" session.*-Einstellungen. Ich weiß nicht, ob der Suhosin an Dingen wie einem gemeinsamen session.save_path beteiligt ist. Wenn jedenfalls alle Anwender ihre Sessiondaten in ein und dem selben Verzeichnis ablegen und sich jemand ein strengeres Session-Timeout konfiguriert hat, dann räumt der Garbage Collector auch alle fremden Sessiondateien nach diesem Zeitplan auf. Er unterschiedet nicht zwischen Anwendern oder gar Anwendungen des selben Nutzers.
gerne:
Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/session /var/lib/php/session
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0
Ciao,
Harry
Hi!
Bitte zeig auch mal die "normalen" session.*-Einstellungen. Ich weiß nicht, ob der Suhosin an Dingen wie einem gemeinsamen session.save_path beteiligt ist. Wenn jedenfalls alle Anwender ihre Sessiondaten in ein und dem selben Verzeichnis ablegen und sich jemand ein strengeres Session-Timeout konfiguriert hat, dann räumt der Garbage Collector auch alle fremden Sessiondateien nach diesem Zeitplan auf. Er unterschiedet nicht zwischen Anwendern oder gar Anwendungen des selben Nutzers.
Schau mal da:
session.save_path /var/lib/php/session /var/lib/php/session
/var/lib/php/session sieht mir nach einem sehr allgemeinen Verzeichnisnamen aus. Ich nehme an, dass das bei jedem genau gleich eingestellt ist und dann das oben gesagte Fremdaufräumen passiert.
Leg den session.save_path auf einen Pfad innerhalb deines Kundenverzeichnisses, aber so, dass kein DocumentRoot darauf zeigt. Bei einem guten Hoster kann man die Domainkonfiguration so vornehmen, dass sie auf selbst angelegte Unterverzeichnisse zeigen, so dass man weitere Unterverzeichnisse anlegen kann, auf die keine Domain zeigt.
/kunden/harry/ - die Wurzel deines Kundenverzeichnisses
/kunden/harry/projekt1/ - projektspezifische Wurzeln
/kunden/harry/projekt2/
/kunden/harry/projekt1/docroot/
/kunden/harry/projekt1/session/
/kunden/harry/projekt2/docroot/ - öffentlich erreichbar. http://projekt2.example.com/ zeigt genau darauf.
/kunden/harry/projekt2/session/ - projektspezifisch, aber nicht öffentlich erreichbar. Bei session_save_path() vor dem session_start() angeben oder in der Verzeichniskonfiguration (.htaccess) einstellen.
Lo!
Holladiewaldfee,
/var/lib/php/session sieht mir nach einem sehr allgemeinen Verzeichnisnamen aus. Ich nehme an, dass das bei jedem genau gleich eingestellt ist und dann das oben gesagte Fremdaufräumen passiert.
ah, ok, jetzt kapier ich das. Danke für den Tipp, werde ich mal probieren.
Liebe Grüße,
Harald