php如何禁用 eval 函数?

2023-10-17 后端开发 0

php作为世界上最好的语言,很容易写出相当牛x的功能,比如一句话木马,所有的php一句话木马都有个核心函数eval。正常情况下来说,一般的php代码,并不会使用到eval函数。所以,出于安全角度考虑,禁用掉php的eval函数,是非常有必要的。
在php.ini中,有个disable_functions项目,可以用于设置要禁用的php函数。但是却不能禁用eval函数。据说,是因为eval并不是php的函数,而是zend的函数。
方法一:suhosin扩展
迄今为止,这个韩国人出品的suhosin方案是最出名的了。但是,没有跟上时代的步伐,截至到发稿,仅仅支持到php7.1。所以,下面列出相关github源码地址,大家自行尝试吧。编译的方案是非常传统的php扩展编译方式,没有太特别的。
官方网站:https://suhosin.org/stories/download.html
php5系列扩展:https://github.com/sektioneins/suhosin
php7系列扩展:https://github.com/sektioneins/suhosin7
方法二:diseavl扩展
在suhosin不支持最新的php72和php73的前提下,在github上面又找到了这个扩展diseval。实验了一下diseval,居然可以使用。但是,官方说明里面说,在php7下面是不稳定的。截至发稿,其最新版本号为0.1。diseval源码地址是:
https://github.com/mk-j/PHP_diseval_extension
diseval编译方式和普通的php的源码编译方式,稍稍有所不同。不同的地方就是:要先进source/目录再编译,而不是像其他扩展源码一样,在根目录下面直接编译。