HarryB.: Suhosin zerstört PHPs Session-Management?

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

--
  Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
  Bis dahin:
  Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
  1. 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...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. 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

      --
        Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
        Bis dahin:
        Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
      1. 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!

        1. 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

          --
            Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
            Bis dahin:
            Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
          1. 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!

            1. 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

              --
                Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
                Bis dahin:
                Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel