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

PHP 網頁病毒掃描清除類實作:基於特徵碼匹配的文件凈化方案

     編輯:PHP 綜合知識

問題背景

網站常遭遇木馬植入:PHP/ASP/HTML/JS 文件被注入惡意代碼(iframe、eval、base64_decode 等)。手動清理耗時且易遺漏,自動化掃描清除成為剛需。

類別設計核心

<?php
class ClearVirus {
    public $virusFile   = 'virus.txt';    // 病毒特徵庫
    public $scanFile    = 'save.txt';     // 掃描目標文件列表
    public $logFile     = 'time.txt';     // 掃描日誌
    public $triggerFile = 'e.php';        // 觸發檢測文件
    
    private $patterns = [];   // 病毒特徵陣列
    private $targets  = [];   // 掃描目標路徑
    private $triggered = false;
    
    public function run() {
        $this->loadPatterns();
        $this->checkTrigger();
        if ($this->triggered) {
            $this->logTime();
            $this->loadTargets();
            $this->scanAndClean();
        }
    }
    // ... 內部方法
}

關鍵流程解析

1. 觸發機制

讀取 $triggerFile,若包含任一病毒特徵則啟動全盤掃描。設計意圖:設定一個「蜜罐文件」,一旦被感染即表明系統已淪陷,觸發全量清理。

2. 病毒特徵庫

virus.txt 每行一個特徵字串,支援:

  • 惡意域名:https://evil.com/
  • 危險函數:eval(, base64_decode(, assert(
  • 編碼載荷:gzinflate(, str_rot13(
  • Webshell 特徵:@$_POST[, $_REQUEST[

3. 掃描與清除邏輯

private function scanAndClean() {
    foreach ($this->targets as $path) {
        if (!file_exists($path)) continue;
        
        $content = file_get_contents($path);
        $infected = false;
        
        foreach ($this->patterns as $pattern) {
            if (strpos($content, $pattern) !== false) {
                $content = str_replace($pattern, '', $content);
                $infected = true;
            }
        }
        
        if ($infected) {
            file_put_contents($path, $content);
            $this->logClean($path);
        }
    }
}

關鍵缺陷與風險

問題影響改進方案
字串精確匹配變形/編碼/混淆木馬無法檢測引入正則表達式、YARA 規則、機器學習模型
單純移除特徵碼可能破壞正常代碼邏輯、留下殘餘語法錯誤AST 解析上下文感知清除、備份原文件
無遞歸掃描目錄需手動維護 save.txt 列表RecursiveDirectoryIterator 全目錄遍歷
無隔離區機制誤殺無法恢復移至 quarantine/ 目錄保留原始文件
無增量掃描每次全量讀取,IO 開銷大記錄文件 mtime/size,僅掃描變更文件
無併發控制多進程同時寫入同一文件損壞數據flock() 或獨佔鎖
觸發文件單點故障若 e.php 被刪除/修改失效多觸發點、定時任務、inotify 監控

生產級替代方案

開源工具鏈

  • Linux Malware Detect (LMD):社區維護特徵庫、支援 inotify 實時監控
  • ClamAV:企業級防毒引擎、支援 PHP 掃描模組
  • PHP Malware Scanner:專門針對 PHP Webshell 的靜態分析工具
  • Wordfence / Sucuri:WordPress 專用安全外掛

自建防護體系

  1. 文件完整性監控 (FIM):aide、Tripwire、ossec 監控核心文件變更
  2. 唯讀部署:代碼目錄掛載為唯讀,上傳目錄禁用腳本執行
  3. WAF 防火牆:ModSecurity + OWASP CRS 攔截攻擊請求
  4. 運行時保護:disable_functions、open_basedir、suhosin 限制危險操作
  5. CI/CD 掃描:部署流程整合靜態分析(Psalm、PHPStan、RIPS)

應急響應檢查清單

# 1. 立即隔離
chattr +i /var/www/html  # 鎖定代碼目錄(謹慎使用)

# 2. 尋找入口
grep -r "eval\|base64_decode\|gzinflate" /var/www/html --include="*.php"
find /var/www/html -name "*.php" -mtime -1  # 最近 24h 變更文件

# 3. 分析日誌
awk '$7 ~ /POST/ && $9 ~ /200/ {print $1,$4,$7,$9}' /var/log/nginx/access.log

# 4. 修復與加固
# - 還原乾淨代碼(Git 版本庫)
# - 修補漏洞(SQL注入、文件上傳、反序列化)
# - 更新密鑰、輪換憑證
# - 部署 WAF、啟用 FIM

自寫清除類適合應急臨時處理,但絕不能作為長期安全策略。安全防護應遵循「預防為主、檢測為輔、響應為底」的纵深防御體系,將代碼層面的清理納入 CI/CD 與運行時防護的完整鏈條中。

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