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