2025-09-04 03:19:52
•
25
宝塔面板 php5.6 禁用 eval
Suhosin(一个 PHP 安全扩展)可以禁用eval()函数,并且配置方式相对灵活。Suhosin 分为php-suhosin(针对 PHP 核心的补丁)和php-suhosin-extension(独立扩展),两者都能实现对eval()的限制,以下是具体配置方法:
1. 在宝塔面板中安装 Suhosin 扩展(以 PHP 5.6 为例):

# 下载Suhosin扩展
wget https://download.suhosin.org/suhosin-0.9.38.tgz
tar zxvf suhosin-0.9.38.tgz
cd suhosin-0.9.38
# 编译安装(替换为实际PHP路径)
/www/server/php/56/bin/phpize
./configure --with-php-config=/www/server/php/56/bin/php-config
make && make install
2. 配置 Suhosin 禁用eval()
进入宝塔面板 → PHP 设置 → 「配置文件」
在php.ini末尾添加 Suhosin 配置(根据需求选择):
方法 1:完全禁用eval()
ini
; 加载Suhosin扩展(若未自动加载)
extension=suhosin.so
; 禁用eval()函数
suhosin.executor.disable_eval = On
方法 2:限制eval()的使用场景(更灵活)
ini
; 禁止通过POST/GET参数传递给eval()执行
suhosin.executor.eval.whitelist = "" ; 空表示不允许任何变量
suhosin.executor.eval.blacklist = "$_POST, $_GET, $_REQUEST, $_COOKIE" ; 明确禁止这些变量
3. 验证配置是否生效
重启 PHP 服务后,创建测试文件test_eval.php:
若仍能执行,检查php.ini中 Suhosin 配置是否正确,或通过phpinfo()确认 Suhosin 是否加载成功
注意事项
版本兼容性:Suhosin 对 PHP 5.6 支持较好,但对 PHP 7.4 + 的支持有限(需使用 fork 版本如suhosin7)
与其他限制的配合:Suhosin 的disable_eval比php.ini中的disable_functions优先级更高,两者可同时配置
性能影响:Suhosin 会增加一定的 PHP 解析开销,低配置服务器需评估性能影响
通过 Suhosin 禁用eval()是比单纯disable_functions更可靠的方式,尤其能防御一些绕过常规限制的攻击手段。
测试代码看看是否能运行


1. 在宝塔面板中安装 Suhosin 扩展(以 PHP 5.6 为例):

# 下载Suhosin扩展
wget https://download.suhosin.org/suhosin-0.9.38.tgz
tar zxvf suhosin-0.9.38.tgz
cd suhosin-0.9.38
# 编译安装(替换为实际PHP路径)
/www/server/php/56/bin/phpize
./configure --with-php-config=/www/server/php/56/bin/php-config
make && make install
2. 配置 Suhosin 禁用eval()
进入宝塔面板 → PHP 设置 → 「配置文件」
在php.ini末尾添加 Suhosin 配置(根据需求选择):
方法 1:完全禁用eval()
ini
; 加载Suhosin扩展(若未自动加载)
extension=suhosin.so
; 禁用eval()函数
suhosin.executor.disable_eval = On
方法 2:限制eval()的使用场景(更灵活)
ini
; 禁止通过POST/GET参数传递给eval()执行
suhosin.executor.eval.whitelist = "" ; 空表示不允许任何变量
suhosin.executor.eval.blacklist = "$_POST, $_GET, $_REQUEST, $_COOKIE" ; 明确禁止这些变量
3. 验证配置是否生效
重启 PHP 服务后,创建测试文件test_eval.php:
<?php try { eval('echo "eval执行成功";'); } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ?>若配置生效,访问该文件会显示错误(如eval() has been disabled by the configuration)
若仍能执行,检查php.ini中 Suhosin 配置是否正确,或通过phpinfo()确认 Suhosin 是否加载成功
注意事项
版本兼容性:Suhosin 对 PHP 5.6 支持较好,但对 PHP 7.4 + 的支持有限(需使用 fork 版本如suhosin7)
与其他限制的配合:Suhosin 的disable_eval比php.ini中的disable_functions优先级更高,两者可同时配置
性能影响:Suhosin 会增加一定的 PHP 解析开销,低配置服务器需评估性能影响
通过 Suhosin 禁用eval()是比单纯disable_functions更可靠的方式,尤其能防御一些绕过常规限制的攻击手段。
测试代码看看是否能运行

<?php //error_reporting(0); header("Content-Type: text/html;charset=utf-8"); eval('echo "Hello, World!";'); ?>
