在PHP中,eval() 確實(shí)是一個(gè)及其危險(xiǎn)的函數(shù)。它允許將字符串作為PHP代碼執(zhí)行,這是其獨(dú)特且強(qiáng)大的功能。對(duì)于php安全來說具有很大的殺傷力,給系統(tǒng)帶來了嚴(yán)重的安全風(fēng)險(xiǎn)。很多PHP木馬就使用了這個(gè)函數(shù),因此需要禁用eval
由于eval() 是PHP語言的一個(gè)內(nèi)置函數(shù)(不是系統(tǒng)組件函數(shù)),它是PHP語言的核心部分。由于它是PHP語言的一部分,因此無法簡單配置php.ini的disable_functions=eval來禁止它。
可以通過第三方免費(fèi)開源組件PHP_dis_extension來禁止它,步驟如下:
1、下載PHP_dis_extension并上傳到服務(wù)器
下載地址 : https://github.com/mk-j/PHP_dis_extension
PHP5-PHP7使用0.1版,PHP8使用0.2版本
下載壓縮包到/usr/src目錄,并解壓:
unzip PHP_dis_extension-master.zip
2、編譯并安裝
cd /usr/src/PHP_dis_extension-master/source
phpize
./configure --with-php-config=/www/server/php/83/bin/php-config
make && make install
注意:/www/server/php/83/bin/php-config為你實(shí)際php的路徑,這里是PHP8.3
使用命令whereis phpize可以獲取取當(dāng)前php路徑
編譯成功后,擴(kuò)展就會(huì)放在在上圖紅框的路徑里
3、修改php.ini配置
配置php.ini,在里面加上
extension = diseval.so
加上后,重啟php服務(wù):service php-fpm restart
4、驗(yàn)證配置是否成功
phpinfo()輸出,可以看到組件diseval已啟用,表示配置成功
創(chuàng)建一個(gè)測試test.php文件,寫入代碼:
<?php
eval("echo date('Y-m-d H:i:s');"); //輸出當(dāng)前時(shí)間
在瀏覽器打開test.php,執(zhí)行后,如果提示以下信息表示已經(jīng)成功禁止了函數(shù),如果輸出了當(dāng)前時(shí)間表示配置失敗
Fatal error: DIS - Use of eval is forbidden in /www/wwwroot/test1.cn/index.php(4) : eval()'d code on line 1