php 如何禁用 eval 函数?disable_functions 使用范例
发布于 作者:苏南大叔 来源:程序如此灵动~php
作为世界上最好的语言,很容易写出相当牛x的功能,比如一句话木马,所有的php
一句话木马都有个核心函数eval
。正常情况下来说,一般的php
代码,并不会使用到eval
函数。所以,出于安全角度考虑,禁用掉php
的eval
函数,是非常有必要的。
本文测试环境:mac
/php72
。
php.ini
的disable_functions
在php.ini
中,有个disable_functions
项目,可以用于设置要禁用的php
函数。但是却不能禁用eval
函数。据说,是因为eval
并不是php
的函数,而是zend
的函数。这个结论听起来是比较玄乎。
错误的配置示意:
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names.
; http://php.net/disable-functions
disable_functions = eval
正常的配置示意(没有eval
的原因是:写上也不生效):
disable_functions = passthru,exec,system,chroot,chgrp,chown,popen,proc_open,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,shell_exec
suhosin
扩展
迄今为止,这个韩国人出品的suhosin
方案是最出名的了。但是,没有跟上时代的步伐,截至到发稿,仅仅支持到php7.1
。而苏南大叔比较喜欢的php72
和目前最新版本的php73
,都是不支持的。所以,下面列出相关github
源码地址,大家自行尝试吧。编译的方案是非常传统的php
扩展编译方式,没有太特别的。
- 官方网站:https://suhosin.org/stories/download.html
- php5系列扩展:https://github.com/sektioneins/suhosin
- php7系列扩展:https://github.com/sektioneins/suhosin7
编译方式:
phpize
./configure
make && make install
使用方式:
extension = suhosin.so
suhosin.executor.disable_eval = on
更多的配置项目见这里:
更详细的编译过程,这里有介绍:
因为suhosin
目前最高支持到php7.1
。所以,目前来说,可能suhosin
的用途也不是太大,拭目以待。suhosin
在php72
下面进行编译时会报错,截图如下:
./php_suhosin7.h:27:2: error: Suhosin7 works with PHP 7.0 and 7.1 only! Looking for Suhosin for PHP 5.x? Take a look at https://www.suhosin.org/
#error Suhosin7 works with PHP 7.0 and 7.1 only! Looking for Suhosin for PHP 5.x? Take a look at https://www.suhosin.org/
diseval
扩展
在suhosin
不支持最新的php72
和php73
的前提下,苏南大叔在github
上面又找到了这个扩展diseval
。实验了一下diseval
,居然可以使用。但是,官方说明里面说,在php7
下面是不稳定的。截至发稿,其最新版本号为0.1
。diseval
源码地址是:
diseval
编译方式和普通的php
的源码编译方式,稍稍有所不同。不同的地方就是:要先进source/
目录再编译,而不是像其他扩展源码一样,在根目录下面直接编译。
cd source/
phpize
./configure
make && make install
php.ini
是:
extension = diseval.so
效果是:
当然,根据官方说明。这个diseval
扩展,不光禁用了eval
,还关联影响了下面几个函数:create_function
/mb_ereg_replace
/assert
,请知晓。
苏南大叔看了一下diseval
的扩展源码,发现这个禁用eval
的方法,似乎非常简单。核心代码就这个,就仅仅只有88行代码而已,真心是出乎意料啊:
总结
虽然有禁用eval
函数的需求,但是也不是非禁用不可。鉴于目前禁用eval
的方法方案都不是太完美,所以,大家可以期待suhosin
扩展的再次更新吧。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。