欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php正确禁用eval函数与误区介绍

程序员文章站 2022-06-10 12:26:17
...
eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。

eval()针对php安全来说具有很大的杀伤力 一般不用的情况下 为了防止

代码如下 复制代码

使用范例

代码如下 复制代码


$string = '杯子';
$name = '咖啡';
$str = '这个 $string 中装有 $name.
';
echo $str;
eval( "$str = "$str";" );
echo $str;
?>


本例的传回值为
这个 $string 中装有 $name.
这个 杯子 中装有 咖啡.


或更高级点的是

代码如下 复制代码
$str="hello world"; //比如这个是元算结果
$code= "print('n$strn');";//这个是保存在数据库内的php代码
echo($code);//打印组合后的命令,str字符串被替代了,形成一个完整的php命令,但并是不会执行
eval($code);//执行了这条命令
?>;

你上面的咖啡的例子了,在eval里面,首先字符串被替换了,其次替换完后形成一个完整的赋值命令被执行了.

这样的小马砸门 需要禁止掉的

网上好多说使用disable_functions禁止掉eval 是错误的
其实eval() 是无法用php.ini中的disable_functions禁止掉的 because eval() is a language construct and not a function

eval是zend的 不是PHP_FUNCTION 函数;

php怎么禁止eval:

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

安装Suhosin后在

php.ini 中load进来Suhosin.so 加上suhosin.executor.disable_eval = on即可

总结,php eval函数在php中是无法禁用的我们也只有使用插件了