源码安全检测报告插件|瓜奇资源详情页自动出检测报告


这个插件解决什么问题

做源码分享站,有一件事最怕:包里有后门,自己成了投毒链条上的一环。用户在你这里下载、中招、回头找你——砸的是自己的招牌,而这个问题在下载量上来之后几乎必然遇到。

另一件更日常的事是:买家问「这个包安全吗」,你只能回一句「应该没问题」。想认真回答就得人工审——一个 20MB 的商业源码包,PHP 文件上百个,逐个人工看一遍不现实,看完了也没法留下凭证给下一个买家看。

「源码安全检测报告」要解决的就是这两件事:把资源包的安全检测变成自动流程,检测结果直接挂在资源详情页上,谁都能看得见。不用装任何外部程序,也不用把源码交到第三方平台。

插件概览

  • 插件名称:源码安全检测报告
  • 插件标识guaqi/src-scan-report
  • 当前版本:v1.1.0
  • 检测引擎:srcscan/1.3-php(纯 PHP 实现,零外部依赖)
  • 运行环境:瓜奇(GuaQi)框架运行时插件,需 WordPress 侧支持
  • 适用前端:Nuxt SSR 站点,报告在服务端直出
  • 上线状态:已在 8号码库(8maoku.com)资源详情页启用运行

检测什么:27 条规则分成三类

引擎内置 27 条检测规则,按「要不要影响评分」分成三类。这个划分方式是这个插件和普通查毒工具最大的区别,值得单独说清楚。

风险项 14 条 —— 参与评分

这是唯一会扣分的一类,覆盖 8 种后门与 webshell 特征,以及 6 种可疑行为。8 种后门特征包括:请求参数直接进入执行函数、请求参数直接进入文件包含、变量函数执行请求参数、请求参数批量覆盖变量、编码载荷后执行、回连裸 IP 地址、配置预加载文件、向文件写入 PHP 代码。这 8 条是 webshell 的标准形态,正常业务代码不会这样写。

可疑行为侧包括超长十六进制转义串、字符串拼接构造函数名('sys'.'tem' 这种绕检测写法)、硬编码的长令牌、远程升级地址、远程下发并覆盖站点文件、X-Forwarded-For 无条件覆盖客户端 IP。这几条不一定就是恶意,但它们构成的是「可被你验证的隐患」,所以放在扣分类里。

部署加固建议 10 条 —— 不扣分

上传逻辑落盘、目录权限 0777、路径拼接含上级跳转、使用 PHP 8 已移除的废弃函数、花括号字符串下标、疑似硬编码凭据、递归删除实现、数据库脚本内置默认管理员账号、扩展名与实际内容不符、危险执行函数。这一类的特点很明确:它们是「该检查什么」,不是「你做错了什么」。上传功能本身是必需的,编码函数本身是中性的——把这些算成风险项,只会让每一份报告都很难看,最后没人认真读。

来源情报 3 条 —— 不扣分

解码解压函数的使用情况、包内是否存在第三方二次打包标记、数据库或配置是否被注入第三方站点信息。这一类回答的是另一个问题:这个包的来源可信度如何。二次打包是投毒最高发的环节,但它证明的是「来源需要警惕」,不是「代码本身有后门」,所以单列呈现而不计分。

报告里有什么

评分采用 100 分制,且只有风险项参与扣分:高风险每条扣 18 分,中风险 7 分,低风险 3 分,同一条规则只扣一次。加固建议与来源情报命中再多也不影响分数,只作为条目列出来。分数下限为 0。

风险分级:90 分及以上为低风险,75 分及以上为中低风险,60 分及以上为中风险,低于 60 分为高风险。

一份完整报告包含这些内容:

  • 评分与分级:分数、风险等级,以及评分口径说明(写明「仅风险项参与评分」)
  • 三类命中统计:风险项、部署加固建议、来源情报分别命中几条
  • 后门特征逐条结论:8 项特征无论是否命中都会逐条列出。这一块的价值在于说清楚「查了什么」——只列命中项的报告,读的人无法分辨是「查过没发现」还是「压根没查」
  • 命中明细:规则名称、风险等级、所在文件与行号、命中的代码片段、对应的整改建议
  • 基本信息:报告编号、检测引擎版本、文件数与代码行数、检测时间与内容发布时间

报告编号形如 SC-20260921-4A5C28,由日期与随机哈希组成,便于售后对账时引用。检测时间取的是真实扫描时刻,内容发布时间取文章自身的发布时间,两个时间都是真实的——报告本身不会去伪造一个「看起来更早」的时间。

发帖即出报告,全程不用管

插件挂在文章的保存钩子上,走的是异步队列:

  • 保存文章:检测任务自动排入队列,不影响你保存和发布的操作响应
  • 异步取包:后台自动找到资源包并下载到站点临时目录,校验压缩包格式
  • 解压扫描:解压时逐条校验路径(拒绝目录穿越与绝对路径),然后运行引擎
  • 出报告入库:报告自动绑定文章标题与发布时间,写入站点存储
  • 前端展示:资源详情页直接渲染报告,服务端输出,搜索引擎可正常抓取

整条链路没有需要人工介入的环节:不用在本地装 Python、不用跑命令行、不用手工复制任何 JSON 到后台。扫完临时目录自动清理,不会在站点里留下几十 MB 的解压残留。

如果检测失败(包下载不到、格式不对、超时),后台会记录失败原因,并且资源包地址会保留下来,修好之后点一次「立即自动检测」即可重跑。未检测的资源,详情页上的报告模块会自动隐藏,不会出现一份空白报告。

后台配置

模块配置项很少,都在宿主的模块设置面板里:

{
  "apiBase": "https://www.q0di.top",   // 报告接口地址,留空自动探测源站
  "showFindings": true,                // 是否显示命中明细
  "maxFindings": 8,                    // 明细最多显示条数,可选 3 ~ 50
  "showFix": true                      // 是否显示整改建议
}

maxFindings 默认 8 条,因为首屏能承载的明细有限,明细再多也只会被折叠掉。命中数量超出时会提示「仅展示前 N 项」,总数仍然完整呈现。

技术规格

  • 纯 PHP 引擎:不调用 execproc_openshell_exec 等外部执行函数。这不只是兼容性考虑——宝塔默认禁用这些函数,而且引擎自己的第一条规则查的就是它们,真去调外部程序等于自己撞自己的检测项。引擎完全跑在 PHP 内部。
  • 服务端直出:报告的 HTML 由服务端渲染,不依赖客户端脚本,搜索引擎抓取到的就是完整报告内容。
  • 不泄露服务器路径:报告里的检测目标显示为资源包名称,不写服务器上的绝对路径。
  • 临时目录安全:工作目录随机命名、位于上传目录内,扫描结束即后序递归删除;删除前校验路径必须落在工作目录之内,拒绝越界操作。
  • 编码兼容:读取源码时兼容 UTF-8、GBK、BIG-5 等常见编码,国产老源码包不会因为编码问题漏检。
  • 三语支持:简体中文 / English / Español,前台文案按语言分开存放。
  • 老报告自动升级:插件升级后,站内已有的历史报告不需要逐篇重扫——读取时自动补齐三类计数、后门结论与发布时间,评分口径会如实标注为旧的「全规则扣分」而不是谎称新口径。

上线提醒

下面几条是实际部署时踩过的坑,提前知道能省不少时间:

1. 资源包地址要能被程序找到

插件按顺序从四个地方找资源包:后台填写的资源包地址、文章正文里的 .zip 直链、正文里的 pay.* 短链、媒体库里挂载的 zip 附件。如果下载入口是登录后才可见(比如只挂在付费下载模块里、正文里没有直链),程序就找不到包,需要在后台的检测面板里手工填一次资源包地址。填过之后会存成自定义字段,以后每次保存文章都会自动复用,只需要填这一次。

2. 异步检测依赖站点访问触发

下载和扫描走的是 WordPress 的计划任务,而计划任务需要站点有访问才会执行——如果站点长时间没有流量,任务会一直挂着。这种情况下在后台点一次「立即自动检测」,它会同步执行完,不依赖计划任务。

3. 升级同一插件走「更新安装包」,不要走「安装插件」

同一个插件 id 上传新版本时,「安装插件」会新增一条独立的包记录,导致同插件多版本并存;若旧版本还挂在某个前端上处于启用状态,就会触发「A runtime plugin must use one revision across all frontends」,启用过程卡在半路。正确做法是走插件卡片菜单里的「更新安装包」,它会把原本启用该插件的站点一起带进更新流程。

4. 安装、启用、删除都在后台完成

运行时插件的安装与启用走的是会话级校验,应用密码接口只能读取插件目录、写不了。所以这一步没法用脚本批量处理,在后台的运行时插件页操作即可。

常见问题

  • 能保证每份报告都是高分吗?不能,也不应该。分数完全由风险项决定,检测到后门特征就是会掉分——一个「保底 80 分」的报告没有意义。这个插件让分数变好看的方式是重新定义扣分范围:加固建议和来源情报只呈现不扣分,所以一个代码偏老但功能正常的商业包依然能拿到不错的分数,而真有后门特征时分数会实打实地掉下来。
  • 需要在我本地装 Python 或别的环境吗?不需要。检测引擎是纯 PHP 的,跑在站点服务器上,从安装到出报告全程不涉及本地环境。
  • 每篇资源都要手动跑一次检测吗?不用。保存或发布文章时自动排队检测,只有「程序找不到资源包」这一种情况需要手工填一次地址。
  • 检测结果会不会误报,把正常的包判成高风险?存在这个可能,所以引擎把「看起来可疑」和「必须检查」分开了:可能误判的项目(加固建议、来源情报)不参与扣分,只有 8 种后门特征和可验证的隐患才真正影响分数。误报的代价从「报告变难看」降到「多一条待读说明」。

小结

「源码安全检测报告」把「这个包安全吗」从一句口头保证,变成一份挂在资源详情页上、谁都能点开看的报告。发布文章时自动跑,不需要装任何外部程序,也不把源码交到第三方平台上去。

本文介绍的插件为 8号码库原创,目前已在 8maoku.com 的资源详情页实际运行。检测规则可以按自己的资源类型继续增补,评分口径也可以结合实际情况调整。

下载点可用性1 个下载点,0 个已验证可用
  • 蓝奏云该下载点需要登录后确认

可用性由站点定时核验,最近一次 2026-09-22 11:38。若某个下载点不可用,可在评论区告知,我们会尽快替换。

低风险

源码安全检测报告

已检测
100/100
检测引擎 srcscan/1.3-php报告编号 SC-20260922-E6FE3A检测时间 2026-09-22 10:22:23内容发布 2026-09-22 09:58:17源码安全检测报告插件|瓜奇资源详情页自动出检测报告
0高危
4中危
0低危
0提示
结构概览文件 9体积 214 KB代码文件 2代码行 3,632
按类别来源情报 2不扣分
后门特征排查8 项特征全部未发现
  • 请求参数直接进入执行函数未发现
  • 请求参数直接进入文件包含未发现
  • 变量函数执行请求参数未发现
  • 请求参数批量覆盖变量未发现
  • 编码载荷后执行(混淆特征)未发现
  • 回连裸 IP 地址未发现
  • 配置预加载文件(隐蔽后门手法)未发现
  • 向文件写入 PHP 代码未发现
命中明细共 4 项
来源情报不扣分
  • 第三方二次打包 / 转发站标记manifest.json:1

    包内存在第三方源码站的引流文件、水印页或导流文案。说明这不是原厂原始包,而是被搬运方重新打包过。二次打包是投毒最高发的环节,且无法与官方包比对校验,因此来源可信度必须下调,交付前应逐文件核对。

    第三方转发站标记 / 引流文件:manifest.json

    建议:清掉第三方引流文件与标记文件,然后通读一遍被改动过的核心文件,确认除标记之外没有夹带别的改动。

  • 数据库 / 配置被注入第三方站点信息manifest.json:1

    站点名称、描述或关键词里被写入了第三方源码站的品牌与域名。这是转发方在包内做 SEO 引流,装上去等于替别人做外链,且证明核心数据文件被改动过。

    {"schemaVersion":5,"id":"guaqi/src-scan-report","name":"源码安全检测报告","description":"内置 srcscan 源码安全检测引擎:文章发布时自动下载资源包、出报告并绑定标题与发布时间,在资源详情页展示评分、风险分级与命中明细。","version":"1.1.0","requires": …

    建议:把被改写的站点信息改回自己的内容,并顺着同一批 INSERT / UPDATE 语句查出还有哪些字段被注入过。

  • 第三方二次打包 / 转发站标记wordpress/plugin.php:2433

    包内存在第三方源码站的引流文件、水印页或导流文案。说明这不是原厂原始包,而是被搬运方重新打包过。二次打包是投毒最高发的环节,且无法与官方包比对校验,因此来源可信度必须下调,交付前应逐文件核对。

    第三方转发站标记 / 引流文件:wordpress/plugin.php

    建议:清掉第三方引流文件与标记文件,然后通读一遍被改动过的核心文件,确认除标记之外没有夹带别的改动。

  • 第三方二次打包 / 转发站标记wordpress/scanner.php:522

    包内存在第三方源码站的引流文件、水印页或导流文案。说明这不是原厂原始包,而是被搬运方重新打包过。二次打包是投毒最高发的环节,且无法与官方包比对校验,因此来源可信度必须下调,交付前应逐文件核对。

    第三方转发站标记 / 引流文件:wordpress/scanner.php

    建议:清掉第三方引流文件与标记文件,然后通读一遍被改动过的核心文件,确认除标记之外没有夹带别的改动。

仅「风险项」参与评分,加固建议与来源情报只作呈现

本报告由 8号码库源码安全检测引擎(srcscan)静态扫描生成,用于上架前风险筛查,不构成安全保证。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注