Beitrag wurde zuletzt am aktualisiert

Piwik verursacht Suhosin Security-Alert

Piwik vs. Suhosin, Security-AlertPiwik vs. Suhosin, Security-Alert

In den Logdateien des Webservers erfordern mehrere Alerts die Aufmerksamkeit des Server-Administrators. Diese stehen im Zusammenhang mit der PHP Sicherheits-Erweiterung Suhosin und der Webanalyse-Software Piwik, so zumindest der erste Eindruck bei der Auswertung der Alarmmeldungen.
Zum Schutz des PHP-Kerns vor unliebsamen Attacken kommt der Schutzengel – was Suhosin ins deutsche übersetzt in etwa heißt – häufig zum Einsatz.

Einige Server-Betriebssysteme liefern diese Erweiterung standardmäßig mit den PHP-Paketen aus und beim überwiegenden Teil der Hosting-Anbieter kommt diese PHP-Firewall zum Einsatz.
Suhosin verwendet verschiedene Filter, die eine Vielzahl typischer Angriffspunkte abfangen und eine Ausführung potentiell bösartiger PHP-Anfragen verhindern.

Das koreanische Wort Suhosin 수호선 bedeutet soviel wie Patron oder Schutzengel und wird dreisilbig su-ho-schin ausgesprochen

Im Zusammenhang mit der Piwik Webanalyse traten bei den von mir betreuten Installationen gehäuft die folgenden Meldungen in den Error-Logs auf:

Jan 14 08:17:36 servername suhosin[25120]: ALERT - configured GET variable value length limit exceeded - dropped variable 'urlref' (attacker '198.51.100.0', file '/server/pfad/zu/piwik/piwik.php')
Jan 14 08:17:36 servername suhosin[25120]: ALERT - configured GET variable value length limit exceeded - dropped variable '_ref' (attacker '198.51.100.0', file '/server/pfad/zu/piwik/piwik.php')
Jan 14 08:17:59 servername suhosin[25139]: ALERT - configured GET variable value length limit exceeded - dropped variable '_ref' (attacker '198.51.100.0', file '/server/pfad/zu/piwik/piwik.php')

Die beiden auffällig gewordenen Piwik-Parameter urlref und _ref beinhalten die vollständige URL des Referrers inklusive aller Parameter. Diese Referrer-URL, also die Adresse von der ein Webseiten-Besucher unmittelbar kommt, kann sehr lang werden. Mehrere Filter- und Sortier-Parameter können in der Adressleiste für eine schier endlos lange Zeichenkette sorgen, was zu Problemen mit der Suhosin Standardkonfiguration führen kann.
Per Default ist der Schutzengel mit einer Länge von 512 Zeichen, die per GET-Parameter zugelassen sind, vorkonfiguriert. Das klingt sicherlich ausreichend, ist es aber nicht in jedem Fall.

How to disable suhosin? Oder was ist zu tun?

Oft begegnet man in Foren der Frage: „How to disable suhosin?“. Ich würde die Suhosin-Extension auf keinen Fall vollständig deaktivieren, sondern die für den jeweiligen Anwendungsfall notwendigen Parameter heraussuchen und nur diese mit passenden Werten versehen bzw. auf „off“ schalten.

Die Suhosin-Konfiguration muss lediglich nachjustiert werden, was aber vielleicht nicht bei jedem Webpaket/ Hoster möglich sein wird. Eventuell ist es hilfreich hierzu mit dem Hoster in Kontakt zu treten, dabei könnt ihr natürlich auch auf diesen Artikel verweisen.
Der zuständige Parameter ist suhosin.get.max_value_length, dessen Wert (Standard: 512) erhöht werden muss, wofür es unterschiedliche Wege gibt. Die mir bekannten Lösungsmöglichkeiten möchte ich in den folgenden Absätzen aufzeigen.

Suhosin-Wert in der Konfiguration des virtuellen Hosts anpassen

Im Directory-Block des virtuelen Hosts erhöht die folgende Zeile den Wert für die Maximallänge des GET-Parameters auf 1.024:

   php_admin_value suhosin.get.max_vars 1024

Wer lediglich eine Anpassung für das Piwik-Web vornehmen möchte und Zugriff auf diese Apache-Konfigurationsdatei (eigener Server, Plesk, Confixx, ISPConfig usw.) hat, ist mit diesem Lösungsweg gut beraten. Einen Reload des Webserver-Dienstes nicht vergessen und schon sollten auch längere Referrer-URLs nicht mehr von Suhosin blockiert werden.

Suhosin in der .htaccess-Datei anpassen

Wenn der Hoster es zulässt – dafür muss suPHP_engine on bzw. der suPHP_ConfigPath entsprechend gesetzt sein -, kann der Wert auch in der htaccess Datei der Piwik-Installation angepasst werden. Ich gehe aber davon aus, dass dies eher seltener der Fall sein wird, ein Versuch ist es aber wert.

   php_value suhosin.get.max_vars 1024

Globale Änderung in der php.ini

Möchte man eine serverweite Erhöhung der maximalen Länge eines GET-Parameters erreichen, so kann der entsprechende Eintrag auch direkt in der php.ini bzw. suhosin.ini vorgenommen werden.
Unter www.hardened-php.net gibt es dazu eine vollständige Beschreibung aller Konfigurationsparameter. Für den hier beschriebenen Fall genügt eine Änderung der folgenden Zeile, die bei Debian unter
/etc/php5/apache2/conf.d/suhosin.ini zu finden ist:

;suhosin.get.max_value_length = 512
;Semikolon entfernen und Wert erhöhen
suhosin.get.max_value_length = 1024

Ein Restart des Apache-Webservers und schon greifen die neuen Konfigurationen.

Fazit

  1. Verzichtet bitte auf die vermeintlichen Tipps in manchen Foren und deaktiviert Suhosin nicht!
  2. Wirklich auffällig wurde bei mir dieses Problem nur in den Log-Dateien. Erkennbare Probleme in Piwik selbst konnte ich nicht feststellen.

Das hier beschriebene Problem tritt natürlich nicht nur im Zusammenhang mit Piwik auf. Auch in Shop- oder Content Management System und anderen PHP-Anwendungen kann dieser Security-Alert vorkommen. In einigen Fällen können auch 1.024 Zeichen noch immer nicht ausreichend sein. Dann heißt es den Wert weiter erhöhen und regelmäßig die Log-Dateien auswerten.

Die Grafik für diesen Beitrag wurde unter www.pageplugins.com erstellt.

4 Kommentare zu "Piwik verursacht Suhosin Security-Alert"

  1. Hört sich ganz schön kompliziert an. Hatte zum Glück noch keine Meldung dieser Art bekommen, außer mein Provider erledigt alles in der Richtung?!?

  2. Ich lese diese Meldung auch zum ersten Mal. Man weis aber nie, wann man mal damit konfrontiert wird. Auf jeden Fall merkt man bei solchen Fehlern, ob man einen guten Hoster hat, der auch mal das eine oder andere für einen anpasst.

  3. Auch wenn der Beitrag aus dem Jahr 2013 stammt, möchte ich einen Fehler anmerken:

    Im Text sprichst du zu erst von

    suhosin.get.max_value_length

    Du fängst dann aber an mit php_admin_value bzw. php_value die Direktive

    suhosin.get.max_vars

    zu ändern.

    Bei dem Beispiel für die php.ini änderst du dann wieder uhosin.get.max_value_length

    Du scheinst also „max_value_length“ plötzlich mit „max_vars“ zu vertauschen.

    PS: Deinen Ansatz Suhosin nicht abzuschalten sondern bewusst zu konfigurieren finde ich sehr gut!

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.