php 扩展 suhosin 配置不当引发的报错及其解决方法

1、

/var/log/messages 频繁报错:

Jul 24 03:27:04 localhost suhosin[9115]: ALERT - script tried to increase memory_limit to 524288000 bytes which is above the allow
ed value (attacker '14.215.58.244', file '/home/www/bbsphp/index.php', line 2)

查看/home/www/bbsphp/index.php,发现有以下语句:

ini_set("memory_limit","500M");

查看php.ini :

# grep 'suhosin.memory_limit' /usr/local/php/etc/php.ini 
suhosin.memory_limit = 128M

解决方法:

修改php.ini :

suhosin.memory_limit = 640M 或 memory_limit = 640M

2、

/var/log/messages 频繁报错:

Jul 27 21:31:04 localhost suhosin[5308]: ALERT - configured request variable name length limit exceeded - dropped variable 'Mozill
a/5_0_(iPhone;_CPU_iPhone_OS_9_3_2_like_Mac_OS_X)_AppleWebKit/601_1_46_(KHTML,_like_Gecko)_Mobile/13F69;com_chw_appking/18touch_com/tq3_0/dis:AppStore:1_5' (attacker '175.44.219.89', file '/home/www/index.php')

解决:

在php.ini的 [suhosin] 下添加以下三行:

suhosin.request.max_varname_length = 1024
suhosin.get.max_name_length = 1024
suhosin.post.max_name_length = 1024

suhosin配置,官方说明:http://www.suhosin.org/stories/configuration.html

3、禁止eval函数

网上说使用disable_functions 禁止掉eval函数,但是这种禁止是无法生效的。

php的eval函数并不是系统组件函数,因此我们在php.ini中使用disable_functions是无法禁止它的。

那么php怎么禁止eval呢?

如果想禁掉eval可以用php的扩展 Suhosin

1、安装Suhosin扩展
2、在php.ini中加入:extension=suhosin.so
3、在加上:suhosin.executor.disable_eval = on
4、重启php-fpm服务

注意,当禁止eval函数后,有些系统会出现以下错误:

Fatal error: SUHOSIN - Use of eval is forbidden by configuration in /home/wp-includes/classes.php(219) : eval()'d code on line 219