### [源码安全检测报告插件|瓜奇资源详情页自动出检测报告](https://guaqi.com/topic/77943) **Published:** 2026-09-22T02:19:05 **Author:** 星动优创 **Excerpt:** 这个插件解决什么问题做源码分享站,有一件事最怕:包里有后门,自己成了投毒链条上的一环。用户在你这里下载、中招、… ## **这个插件解决什么问题** 做源码分享站,有一件事最怕:包里有后门,自己成了投毒链条上的一环。用户在你这里下载、中招、回头找你——砸的是自己的招牌,而这个问题在下载量上来之后几乎必然遇到。 另一件更日常的事是:买家问「这个包安全吗」,你只能回一句「应该没问题」。想认真回答就得人工审——一个 20MB 的商业源码包,PHP 文件上百个,逐个人工看一遍不现实,看完了也没法留下凭证给下一个买家看。 「源码安全检测报告」要解决的就是这两件事:把资源包的安全检测变成自动流程,检测结果直接挂在资源详情页上,谁都能看得见。不用装任何外部程序,也不用把源码交到第三方平台。 ## **插件概览** - **插件名称**:源码安全检测报告 - **插件标识**:`guaqi/src-scan-report` - **当前版本**:v1.1.0 - **检测引擎**:srcscan/1.3-php(纯 PHP 实现,零外部依赖) - **运行环境**:瓜奇(GuaQi)框架运行时插件,需 WordPress 侧支持 - **适用前端**:Nuxt SSR 站点,报告在服务端直出 - **上线状态**:已在 8号码库([8maoku.com](http://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 的解压残留。 如果检测失败(包下载不到、格式不对、超时),后台会记录失败原因,并且**资源包地址会保留下来**,修好之后点一次「立即自动检测」即可重跑。未检测的资源,详情页上的报告模块会自动隐藏,不会出现一份空白报告。 ## **后台配置** 模块配置项很少,都在宿主的模块设置面板里: ```json { "apiBase": "https://www.q0di.top", // 报告接口地址,留空自动探测源站 "showFindings": true, // 是否显示命中明细 "maxFindings": 8, // 明细最多显示条数,可选 3 ~ 50 "showFix": true // 是否显示整改建议 } ``` 复制 `maxFindings` 默认 8 条,因为首屏能承载的明细有限,明细再多也只会被折叠掉。命中数量超出时会提示「仅展示前 N 项」,总数仍然完整呈现。 ## **技术规格** - **纯 PHP 引擎**:不调用 `exec`、`proc_open`、`shell_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](http://8maoku.com) 的资源详情页实际运行。检测规则可以按自己的资源类型继续增补,评分口径也可以结合实际情况调整。 ![源码安全检测报告插件|瓜奇资源详情页自动出检测报告](http://7b2.com/wp-content/themes/b2/Assets/fontend/images/default-img.jpg) **Comments:** **春哥:** 👍这种适合做用户上传软件类的资源站 ---