php 如何禁用函数 eval 函数

首先一个问题,eval 是不是函数,在php文档里说 eval 语言构造器而不是一个函数 。所以使用 disable_functions 禁用函数的时候,对eval 是没有作用的。

disable_functions

本指令可用于禁止某些函数。接受逗号分隔的函数名列表作为参数。

https://www.php.net/manual/zh/ini.core.php

eval

注意: 因为是一个语言构造器而不是一个函数,不能被 可变函数 调用。

https://www.php.net/manual/zh/function.eval.php

禁用 eval 的方法

使用 snuffleupagus snuffleupagus 是一个可以增强php安全的扩展。需要单独安装,通过配置文件,可以让php程序更加安全。

php.ini 配置文件

[snuffleupagus]
extension=snuffleupagus.so
sp.configuration_file=/etc/php/snuffleupagus.rules

/etc/php/snuffleupagus.rules

sp.disable_function.function("eval").drop();

测试代码

ini_set('display_errors',"on");
ini_set('display_startup_errors',"on");
error_reporting(-1);
eval("phpinfo();");

输出

Fatal error: [snuffleupagus][0.0.0.0][disabled_function][drop] Aborted execution on call of the function 'eval' in /data/html/www.wpcode.cn/a.php(5) : eval()'d code on line 1