首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

善用 php.ini disable_functions 禁用高危 PHP 函式

     編輯:PHP 相關知識

核心防禦機制

php.ini 的 disable_functions 指令可直接在引擎層禁用指定函式,無需修改程式碼即可阻斷整類攻擊向量。被禁用函式被呼叫時會拋出警告:

Warning: phpinfo() has been disabled for security reasons

推薦禁用清單

; 基礎防護:資訊洩露、動態載入、指令執行
disable_functions = phpinfo, dl, exec, system, passthru, shell_exec, popen, proc_open, proc_close, escapeshellarg, escapeshellcmd

; 進階防護:檔案系統、程式控制(視業務評估啟用)
disable_functions = chdir, chroot, opendir, readdir, scandir, fopen, unlink, mkdir, rmdir, rename, file_get_contents, fwrite, chmod, chown, symlink, link

常見誤區:eval() 無法禁用

許多開發者嘗試將 eval 加入禁用清單,但 eval() 是語言結構而非函式,不受 disable_functions 限制。防禦 eval 注入需從程式碼層面著手:避免動態程式碼執行、啟用 Opcode 快取防範注入、部署 RASP 方案。

驗證與測試

; CLI 快速驗證
php -r "system('id');"
php -r "phpinfo();"
php -r "eval('phpinfo();');"  ; 此行不受 disable_functions 影響

容器化環境注意事項

  • Docker 映像建構時在 php.ini 設定,避免運行時修改
  • Kubernetes 可透過 ConfigMap 掛載統一 php.ini
  • 搭配 open_basedir 形成纵深防禦

替代方案比較

方案層級彈性效能影響適用場景
disable_functions引擎層低(全域生效)無基礎防護、合規要求
RASP (如 OpenRASP)運行時高(可上下文感知)微小精細防禦、零日漏洞緩解
SuPHP / PHP-FPM pool 隔離進程層中低多租戶共享主機
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved