帝国CMS 修复头像上传挂马漏洞BUG 防止上传病毒图片头像

访问时间 2026-01-28 22:37:12
访问量

内容简介

帝国CMS 修复头像上传挂马漏洞BUG 防止上传病毒图片头像安全验证:检查恶意代码\e\member\class\member_edit

网站描述

帝国CMS  修复头像上传挂马漏洞BUG 防止上传病毒图片头像
帝国CMS  修复头像上传挂马漏洞BUG 防止上传病毒图片头像

安全验证:检查恶意代码

\e\member\class\member_editinfofun.php

搜索:$upic=eMember_UpicReturnGupic($filetype);

在这个代码上面添加

    // 安全验证:检查文件内容是否包含恶意代码
    if(!checkAvatarFileSecurity($file, $file_name)) {
        echo <script>alert(&39;头像文件可能包含恶意代码,上传被阻止&39;);history.go(-1);</script>;
        db_close();
        $empire=null;
        exit();
    }


头像文件安全验证

然后在最底部的 ?>前面添加下面的函数

/**
 * 头像文件安全验证
 * @param string $file 临时文件路径
 * @param string $fileName 文件名
 * @return bool 安全返回true,可疑返回false
 */
function checkAvatarFileSecurity($file, $fileName) {
    // 检查文件是否存在
    if (!file_exists($file)) {
        return false;
    }
    
    // 检查文件大小
    $fileSize = filesize($file);
    if ($fileSize === 0) {
        return false;
    }
    
    // 读取文件内容
    $fileContent = file_get_contents($file);
    
    // 检测常见恶意代码模式
    $maliciousPatterns = [
        // PHP代码注入
        &39;/<\?(php|=|\s)/i&39;,
        &39;/eval\(/i&39;,
        &39;/base64_decode\(/i&39;,
        &39;/system\(/i&39;,
        &39;/exec\(/i&39;,
        &39;/shell_exec\(/i&39;,
        &39;/passthru\(/i&39;,
        &39;/proc_open\(/i&39;,
        &39;/popen\(/i&39;,
        
        // JavaScript代码注入
        &39;/<script[^>]*>/i&39;,
        &39;/javascript:/i&39;,
        &39;/onload=/i&39;,
        &39;/onerror=/i&39;,
        &39;/onclick=/i&39;,
        &39;/onmouseover=/i&39;,
        
        // HTML注入
        &39;/<iframe[^>]*>/i&39;,
        &39;/<object[^>]*>/i&39;,
        &39;/<embed[^>]*>/i&39;,
        &39;/<applet[^>]*>/i&39;,
        
        // Shell脚本
        &39;/!\/bin\//i&39;,
        &39;/!\/usr\/bin\//i&39;,
        &39;/\/bin\/bash/i&39;,
        &39;/\/bin\/sh/i&39;,
        
        // 可疑字符串
        &39;/phpspy/i&39;,
        &39;/c99shell/i&39;,
        &39;/r57shell/i&39;,
        &39;/webadmin/i&39;,
        &39;/backdoor/i&39;,
        &39;/trojan/i&39;,
        &39;/malware/i&39;,
        &39;/virus/i&39;,
    ];
    
    foreach ($maliciousPatterns as $pattern) {
        if (preg_match($pattern, $fileContent)) {
            return false;
        }
    }
    
    // 检查文件头是否与扩展名匹配
    $fileHeader = substr($fileContent, 0, 10); // 只检查前10个字节
    $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
    
    $validHeaders = [
        &39;jpg&39; => \xFF\xD8,
        &39;jpeg&39; => \xFF\xD8,
        &39;png&39; => \x89PNG,
        &39;gif&39; => GIF8,
        &39;bmp&39; => BM,
        &39;webp&39; => RIFF
    ];
    
    if (isset($validHeaders[$extension])) {
        $expectedHeader = $validHeaders[$extension];
        if (strpos($fileHeader, $expectedHeader) !== 0) {
            return false;
        }
    }
    
    // 检查文件是否包含过多空字符(可能是二进制可执行文件)
    $nullCount = substr_count($fileContent, \x00);
    if ($nullCount > $fileSize * 0.3) { // 超过30%的空字符
        return false;
    }
    
    // 检查文件是否包含过长行(可能是编码的恶意代码)
    $lines = explode(\n, $fileContent);
    foreach ($lines as $line) {
        if (strlen($line) > 5000) { // 单行超过5000字符
            return false;
        }
    }
    
    return true;
}


加载中...