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

PHP 防禦惡意腳本導致帶寬耗盡:禁用危險函數與配置加固

     編輯:PHP 綜合知識

問題現象

服務器頻發帶寬被佔滿、負載飆升,排查發現 PHP 腳本被植入惡意代碼,利用 file_get_contents()、fsockopen()、curl 等發起大量外部請求(DDOS 攻擊跳板、採集器、挖礦下載器等)。

核心防禦:php.ini 關鍵配置

; 1. 禁用高危函數(根據業務需求調整)
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,symlink,link,dl,pcntl_exec,pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv,apache_getenv,apache_note,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname,posix_times,posix_ctermid,posix_ttyname,posix_isatty,posix_access,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_initgroups,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname,posix_times,posix_ctermid,posix_ttyname,posix_isatty,posix_access,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_initgroups

; 2. 禁用 URL 封裝協議(防止 file_get_contents/fopen 讀取遠程資源)
allow_url_fopen = Off
allow_url_include = Off

; 3. 啟用 sockets 擴展(若業務需合法使用 socket 通信)
; extension=sockets

; 4. 限制腳本最大執行時間與記憶體
max_execution_time = 30
max_input_time = 60
memory_limit = 128M

; 5. 禁用錯誤顯示(生產環境)
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log

補充防禦層

1. Web 應用防火牆 (WAF)

  • ModSecurity + OWASP CRS 規則集
  • 商業 WAF(阿里云盾、騰訊云 WAF、Cloudflare)

2. 系統級防護

  • iptables/nftables 限制出站連接頻率、目標 IP 白名單
  • SELinux/AppArmor 限制 PHP 進程權限
  • 容器化隔離:Docker + 只讀根文件系統、網絡命名空間隔離

3. 代碼審計與監控

  • 定期掃描 eval、base64_decode、gzinflate、preg_replace.*\/e 等特徵
  • 文件完整性監控(Tripwire、AIDE)
  • 異常流量告警(Netdata、Zabbix、Prometheus)

緊急應對腳本(檢測 502 並重啟 PHP-FPM)

 ['timeout' => 3, 'method' => 'HEAD']]);
    $headers = @get_headers($url, 1, $ctx);
    
    if ($headers && stripos($headers[0], '502') !== false) {
        @shell_exec($cmd);
        error_log("[WATCHDOG] Detected 502, php-fpm reloaded at " . date('c'));
        exit;
    }
    sleep(2);
}

總結

「禁用危險函數 + 關閉 URL 封裝 + 最小權限原則」是 PHP 防禦帶寬滥用的基石。配合 WAF、系統防火牆、容器化與持續監控,可構建纵深防禦體系。記住:沒有銀彈,只有持續的加固與監控。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved