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

PHP 必須禁用的危險函數清單與 php.ini 設定指南

     編輯:PHP 綜合知識

為什麼要禁用危險函數

PHP 內建多種可執行系統指令、操作檔案系統、修改執行環境的函數。若伺服器遭駭或程式碼注入,攻擊者可利用這些函數執行任意指令、竊取檔案、提權、植入後門。在 php.ini 設定 disable_functions 是最基礎的防禦縱深措施。

高風險函數分級表

函數功能風險等級備註
exec執行外部程式高最常被濫用的指令執行入口
shell_exec透過 Shell 執行指令並回傳字串高反引號 `cmd` 同義
system執行外部程式並輸出高
passthru執行外部程式並直接輸出原始資料高
proc_open執行指令並開啟管道讀寫高可雙向互動,更危險
proc_get_status取得 proc_open 開啟程序資訊高
popen開啟程序管道高
pcntl_exec執行程式替換當前進程高需 pcntl 擴充
chroot改變根目錄高僅 CLI、非 Windows
chgrp / chown改變檔案群組/擁有者高配合檔案上傳可竊取權限
symlink建立符號連結高可跳出 open_basedir
dl動態載入 PHP 擴充模組高已移除於 PHP 7+,舊版必禁
ini_set / ini_alter / ini_restore修改/還原 PHP 設定高可關閉 safe_mode、開啟危險函數
putenv設定環境變數高舊版可繞過 safe_mode 執行指令
error_log寫入錯誤日誌低特定版本可繞過 safe_mode
phpinfo輸出 PHP 環境資訊中洩露伺服器配置細節
scandir列出目錄檔案中資訊洩露,配合 LFI 危險
readlink讀取符號連結目標中
syslog呼叫系統 syslog中
pfsockopen / fsockopen / stream_socket_server建立 Socket 連線高/中可掃描內網、發起攻擊

建議的 disable_functions 設定

; php.ini
disable_functions = exec,shell_exec,system,passthru,proc_open,proc_get_status,popen,pcntl_exec,chroot,chgrp,chown,symlink,dl,ini_set,ini_alter,ini_restore,putenv,phpinfo,scandir,readlink,syslog,pfsockopen,fsockopen,stream_socket_server

說明:

  • 以逗號分隔,不需空白。
  • 若專案確需部分函數(如 exec 用於匯出報表),請評估風險、限制參數、改用非阻塞佇列或獨立 Worker 機制,切勿直接開放。
  • PHP 7.4+ 已移除 dl、ini_alter 等,設定時會被忽略,無害。

驗證禁用生效

<?php
var_dump(function_exists('exec')); // bool(false)
var_dump(ini_get('disable_functions'));

補充防禦措施

  1. open_basedir:限制腳本可存取的目錄樹,防止目錄遍歷。
  2. suhosin / Snuffleupagus:進階 PHP 安全擴充,提供更細緻的函數呼叫控制、評估器防護。
  3. 禁用危險類別:disable_classes 可禁用 COM、DOTNET 等。
  4. 容器化隔離:以 Docker/K8s 限制系統呼叫、檔案系統、網路命名空間。
  5. 最小權限原則:PHP-FPM 以非 root、專用使用者執行;目錄權限 755/644,上傳目錄禁用執行位元。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved