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

PHP eval 函數安全風險與防範:一句話木馬分析

     編輯:PHP 相關知識

PHP eval 函數安全風險與防範:一句話木馬分析

eval() 會將字串當作 PHP 程式碼執行,極度危險。駭客常利用 @eval($_POST['c']) 植入「一句話木馬」,透過 POST 請求任意執行程式碼。本文分析原理並提供防禦策略。

木馬原理示意(僅供理解,勿實際部署)

<?php
// 惡意檔案 shell.php
@eval($_POST['c']);
?>

攻擊者發送 POST 請求:c=system('id'); 即可執行系統指令。

為何 eval 危險

  • 繞過 disable_functions 限制
  • 程式碼在運行時動態生成,靜態掃描難以偵測
  • 可結合 base64_decode、gzuncompress 混淆

防禦措施

  1. 禁用 eval:php.ini 加入 disable_functions = eval,assert,system,shell_exec,passthru,exec,popen,proc_open
  2. 嚴格輸入驗證:絕不直接將 $_GET/$_POST/$_REQUEST 帶入敏感函式
  3. 檔案上傳防護:
    • 驗證 MIME 類型與副檔名
    • 上傳目錄設定 php_flag engine off 禁止 PHP 解析
    • 隨機重命名、儲存於非 Web 可訪問目錄
  4. 部署 WAF:ModSecurity、OpenRASP 等即時攔截惡意請求
  5. 定期掃描:使用 find /var/www -name "*.php" -exec grep -l "eval" {} \; 掃描可疑檔案
  6. 最小權限原則:Web 使用者僅擁有必要目錄讀寫權限,禁止寫入執行目錄

程式碼審計關鍵字

eval|assert|preg_replace.*\/e|create_function|call_user_func|array_map.*system

發現上述模式應立即審查上下文邏輯。

總結

「不信任任何輸入」是安全開發鐵律。若專案確需動態執行邏輯,請改用沙箱機制(如 v8js、獨立容器)並嚴格限制 API 表面。

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