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