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

防範 PHP 惡意腳本濫用 Socket 發動 DoS 攻擊的伺服器加固指南

     編輯:PHP 綜合知識

駭客若能上傳或注入 PHP 腳本,可能利用 fsockopen、socket_create 等函數發起 UDP Flood 等拒絕服務攻擊,耗盡伺服器出站頻寬。本文說明攻擊腳本特徵,並提供 PHP 環境與 IIS 伺服器的防護設定建議。

攻擊腳本典型特徵

惡意腳本通常包含以下特徵:

  • 使用 set_time_limit(0) 移除執行時間限制。
  • 使用 ignore_user_abort() 讓腳本在使用者斷線後持續執行。
  • 透過 $_GET 直接接收目標 IP、Port、攻擊時長等參數。
  • 迴圈中大量建立 UDP Socket 連線 (fsockopen("udp://...")) 並發送垃圾封包。

此類攻擊表現為:IIS 啟動後出站頻寬瞬間被佔滿,伺服器持續向外發送封包,不同於 DDoS (大量封包湧入)。

PHP 環境防護設定 (php.ini)

核心策略是禁用危險函數與限制網絡權限:

  1. 禁用函數:在 php.ini 的 disable_functions 加入:
    disable_functions = fsockopen, pfsockopen, socket_create, socket_connect, socket_sendto, stream_socket_client, stream_socket_server, exec, system, passthru, shell_exec, proc_open, popen, curl_exec, curl_multi_exec
    
    注意:視應用需求調整,若專案需使用 cURL 或 Socket 連接外部 API,請勿禁用對應函數,改以程式碼層面嚴格驗證參數。
  2. 關閉 URL 封裝協議:防止 file_get_contents、fopen 等函數存取遠端資源:
    allow_url_fopen = Off
    allow_url_include = Off
    
  3. 禁用 Socket 擴展:確認 php.ini 中 Socket 擴展未啟用 (前面有分號):
    ;extension=php_sockets.dll
    

IIS 伺服器層面防護

  1. 修改 php.ini 後,必須重啟 IIS (執行 iisreset 或在服務管理員重啟)。
  2. 若上述設定仍無效,可在 IIS 「處理常式對應」或「ISAPI 與 CGI 限制」中,限制 PHP 擴展 (*.php) 的執行權限,或移除不必要的模組對應。

網路與防火牆層面補充防護

  • 出站防火牆規則:在 Windows 防火牆或前端硬體防火牆設定規則,禁止 Web 伺服器主動發起 UDP 連線,僅允許必要的 TCP 出站連線 (如資料庫 3306、API 443)。
  • WAF / 入侵偵測:部署 Web 應用程式防火牆 (WAF) 或使用 ModSecurity 規則,攔截 URL 參數中包含 port=、ip=、time= 等可疑特徵的請求。
  • 最小權限原則:執行 PHP 的 IIS 應用程式池身分 (Application Pool Identity) 應為低權限使用者,非 Administrator 或 SYSTEM。
  • 程式碼審計與上傳防護:根本解決在於防止惡意腳本被上傳或注入。嚴格驗證檔案上傳類型、禁用執行權限於上傳目錄、使用參數化查詢防 SQL 注入、定期掃描異常檔案。

總結

防範 PHP 被當作跳板發動 DoS,關鍵在於「禁用危險函數」與「網路出站管控」雙重防線。伺服器管理員應依業務需求精簡 PHP 功能,並配合防火牆限制不必要的出站流量,將損害降至最低。

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