PHP Suhosin Speicherprobleme

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen

Bei der Verwendung von PHP und Suhosin kann es zu Problemen bei der Speicherverwaltung bzw. der Limits kommen.

Umgebung:
Debian 6.0 Kernel 2.6.32-5-686/ PHP 5.3.3-7+squeeze3 / Suhosin Patch 0.9.9.1

Ausgangssituation:

  • PHP Skript wird via CLI ausgeführt
  • PHP CLI Konfiguration (/etc/php5/cli/php.ini) setzt das Speicherlimit auf unbegrenzt
memory_limit = -1
http://php.net/memory-limit
  • dennoch tritt ein Speicherfehler auf, z.B. bei der Verwendung großer Datenmengen innerhalb von smarty:
PHP Fatal error:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 7105434 bytes) in /srv/httpd/vhosts/localhost/htdocs/secreporter/lib/common/smarty/sysplugins/smarty_internal_templatebase.php on line 195
  • andere Fehlermeldungen
ALERT - script tried to disable memory_limit by setting it to a negative value -1 bytes which is not allowed (attacker 'REMOTE_ADDR not set', file 'unknown') 
ALERT - script tried to increase memory_limit to 268435456 bytes which is above the allowed value .... file '/srv/httpd/vhosts/www.domain.de [Mehr Informationen] /htdocs/wp-admin/admin.php', line 109) 


Abhilfe:
Hier hilft es den default Suhosin Wert suhosin.memory_limit von 0 auf einen entsprechenden Wert zu setzen (http://http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit) - dieser kann auch geringer als das PHP memory_limit Wert sein. Anscheinend ist hier im Suhosin ein fester 64M Wert vorgegeben, welcher hier Probleme macht. /etc/php5/conf.d/suhosin.ini

;suhosin.memory_limit = 0

Will man das Skripte nur soviel Ram benutzen dürfen wie es in der php.ini (memory_limit = ) festgelegt wird, sollte der Wert bei 0 bleiben. Jeder andere Wert erlaubt dem Skript den Ram der php.ini + den suhosin Wert in MB zu nutzen.



Beschreibung:
As long scripts are not running within safe_mode they are free to change the memory_limit to whatever value they want. Suhosin changes this fact and disallows setting the memory_limit to a value greater than the one the script started with, when this option is left at 0. A value greater than 0 means that Suhosin will disallows scripts setting the memory_limit to a value above this configured hard limit.