在PHP中,eval() 确实是一个及其危险的函数。它允许将字符串作为PHP代码执行,这是其独特且强大的功能。对于php安全来说具有很大的杀伤力,给系统带来了严重的安全风险。很多PHP木马就使用了这个函数,因此需要禁用eval
由于eval() 是PHP语言的一个内置函数(不是系统组件函数),它是PHP语言的核心部分。由于它是PHP语言的一部分,因此无法简单配置php.ini的disable_functions=eval来禁止它。
可以通过第三方免费开源组件PHP_dis_extension来禁止它,步骤如下:
1、下载PHP_dis_extension并上传到服务器
下载地址 : https://github.com/mk-j/PHP_dis_extension
PHP5-PHP7使用0.1版,PHP8使用0.2版本
下载压缩包到/usr/src目录,并解压:
unzip PHP_dis_extension-master.zip
2、编译并安装
cd /usr/src/PHP_dis_extension-master/source
phpize
./configure --with-php-config=/www/server/php/83/bin/php-config
make && make install
注意:/www/server/php/83/bin/php-config为你实际php的路径,这里是PHP8.3
使用命令whereis phpize可以获取取当前php路径
编译成功后,扩展就会放在在上图红框的路径里
3、修改php.ini配置
配置php.ini,在里面加上
extension = diseval.so
加上后,重启php服务:service php-fpm restart
4、验证配置是否成功
phpinfo()输出,可以看到组件diseval已启用,表示配置成功
创建一个测试test.php文件,写入代码:
<?php
eval("echo date('Y-m-d H:i:s');"); //输出当前时间
在浏览器打开test.php,执行后,如果提示以下信息表示已经成功禁止了函数,如果输出了当前时间表示配置失败
Fatal error: DIS - Use of eval is forbidden in /www/wwwroot/test1.cn/index.php(4) : eval()'d code on line 1