全部
常见问题
产品动态
精选推荐
功能建议

已处理 待处理 {{opt.name}}
已处理 待处理
分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
网站内容被劫持问题修复(漏洞修复)

管理 管理 编辑 删除

1、如果有以下文件先删除文件

415ca202606250947183440.png

2755e202606250947311158.png

2、然后给nginx里面加上以下代码,放在server {}内,一定要放在 location ~ \.php$之前

location ~* ^/public/uploads/attach/.*\.(php|php5|phtml|phar)$ {
    return 403;
}

3、重启nginx

4、修改文件

crmeb\app\services\system\attachment\SystemAttachmentServices.php  将 public function upload 方法替换成以下内容

public function upload(int $pid, string $file, int $upload_type, int $type, $menuName, $uploadToken = '')
{
    try {

        if ($upload_type == 0) {
            $upload_type = sys_config('upload_type', 1);
        }

        $path = make_path('attach', 2, true);
        if ($path === '') {
            throw new AdminException('无法创建文件夹,请检查您的上传目录权限');
        }

        $upload = UploadService::init($upload_type);
        $res = $upload->to($path)->validate()->move($file, false);
        if ($res === false) {
            throw new UploadException($upload->getError());
        }

        $fileInfo = $upload->getUploadInfo();


        $extension = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));

        $denyExt = [
            'php','php3','php4','php5','phtml','phar',
            'sh','jsp','asp','aspx','exe','bat','cmd','pl','py'
        ];
        if (in_array($extension, $denyExt)) {
            @unlink($res->filePath);
            throw new UploadException('禁止上传可执行文件');
        }


        $mime = $fileInfo['type'] ?? '';
        $denyMime = [
            'application/x-php',
            'text/x-php',
            'application/x-httpd-php',
        ];
        if (in_array($mime, $denyMime)) {
            @unlink($res->filePath);
            throw new UploadException('非法文件类型');
        }


        $allowExt = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'xlsx', 'xls', 'zip', 'mp4'];

        if ($fileInfo && $type == 0 && in_array($extension, $allowExt)) {
            $data = [
                'name'        => $fileInfo['name'],
                'real_name'   => $fileInfo['real_name'],
                'att_dir'     => $fileInfo['dir'],
                'satt_dir'    => $fileInfo['thumb_path'],
                'att_size'    => $fileInfo['size'],
                'att_type'    => $fileInfo['type'],
                'image_type'  => $upload_type,
                'module_type' => 1,
                'time'        => $fileInfo['time'] ?? time(),
                'pid'         => $pid,
                'scan_token'  => $uploadToken,
            ];
            $this->dao->save($data);
        }

        return $res->filePath;

    } catch (\Throwable $e) {
        \think\facade\Log::error('文件上传异常:' . $e->getMessage());
        throw new UploadException($e->getMessage());
    }
}

5、文件地址:\crmeb\crmeb\services\upload\BaseUpload.php

把 checkFileContent 方法改成下面内容:

public function checkFileContent($fileHandle)
{
    // 获取文件扩展名
    $extension = strtolower(pathinfo($fileHandle->getOriginalName(), PATHINFO_EXTENSION));
    

    $safeBinaryExt = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp', 'zip', 'rar', '7z', 'mp4', 'avi', 'mov', 'mp3', 'wav', 'xlsx', 'xls', 'docx', 'doc', 'pdf'];
    if (in_array($extension, $safeBinaryExt)) {
        return true;
    }
    
    // 只对文本/代码类文件做内容检测
    $stream = fopen($fileHandle->getPathname(), 'r');
    $content = (fread($stream, filesize($fileHandle->getPathname())));
    if (is_resource($stream)) {
        fclose($stream);
    }
    
    // 检测 PHP 代码标签
    if (preg_match('/<\?php|<\?=|<\?[\s]/i', $content)) {
        return $this->setError('文件内容包含非法代码');
    }
    
    // 检测危险函数调用
    if (preg_match('/\beval\s*\(|\bsystem\s*\(|\bexec\s*\(|\bshell_exec\s*\(|\bpassthru\s*\(|\bassert\s*\(|\bcreate_function\s*\(|\bpopen\s*\(|\bproc_open\s*\(|\bpcntl_exec\s*\(/i', $content)) {
        return $this->setError('文件内容包含非法代码');
    }
    
    // 检测框架敏感关键词
    if (preg_match('/\bthink\b|\bphar\b|\bSocket\b|\bChannel\b|\bFlysystem\b|\bPsr6Cache\b|\bCached\b|\bRequest\b|\bdebug\b|\bPsr6Cachepool\b/i', $content)) {
        return $this->setError('文件内容不合法');
    }
    
    return true;
}

6、文件地址:\crmeb\crmeb\services\upload\storage\Local.php

在 Local.php 的 move 方法中,图片上传后加上:

a45cd202607021059151115.png

// 如果是图片,验证是否为真实图片
$extension = strtolower(pathinfo($fileHandle->getOriginalName(), PATHINFO_EXTENSION));
if (in_array($extension, ['jpg', 'jpeg', 'png', 'gif', 'webp'])) {
    $imageInfo = @getimagesize($fileHandle->getPathname());
    if (!$imageInfo) {
        return $this->setError('不是合法的图片文件');
    }
}

完整附件如下:

附件

SystemAttachmentServices.zip

附件

BaseUpload.zip

附件

Local.zip

{{voteData.voteSum}} 人已参与
支持
反对
推荐回答
CRMEB-慕白寒窗雪
社区运营专员---高冷のBoy | 呆萌のGirl
注意事项: 1、后台的密码设置复杂一点,当前不支持特殊字符 2、没有使用云数据库的话不要开放3306端口,如果用了云数据库或者远程数据库,可以改用其他的端口 3、不是用ftp的话不要开放21端口 4、不连终端的时候22端口也可以关闭,用的时候再放行
请登录后查看

CRMEB-慕白寒窗雪 最后编辑于2026-07-06 11:49:01

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
1629
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

{{ wechatLoginError }}
切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服
CRMEB咨询热线 400-8888-794

扫码领取产品资料

功能清单
思维导图
安装教程
CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服