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