ARTICLE · 1042402
H5商城源码带后门?支持抖音、快手、视频号模板,上线前这7步审计照着走
源码站的原话:后门已经清除
别人清过一遍
不代表你不用再查
三合一 H5 商城 · 免登录下单 · 分站授权
bbbb.bid · 开源源码拆解
📦 7 个核心看点
👉 滑动
PART 01
审计目标
它碰了什么
PART 02
审计路径
先钱后权再数据
PART 03
第一处
支付回调与偷单
PART 04
第二处
分站授权校验
PART 05
第三处
免登录与默认值
PART 06
五步自查
不用工具也能走
PART 07
加固清单
十条照着改
一句话说清这篇要讲什么
别人帮你清过一遍,不等于你不用再查一遍
审计的第一步,是承认链路里的最后一棒是你
卖家说「后门已经清掉了」。这句话本身,就是审计清单的第一条——因为它说明这类包里出现后门是常态,而「暂未发现」是一个动作的结束,不是一个结论的成立。

这篇不聊功能,只聊一件事:手里有这么一份源码,上线之前该按什么顺序、查哪几个地方。清单在 PART 06 和 PART 07,急着用可以先翻过去。
01
PART
审计目标:这套东西到底碰了什么
AUDIT TARGET · SURFACE
先把对象说清楚。
这套源码在下载站的定位是「H5 商城系统」,卖点三句话:三套前端模板(抖音小店、快手小店、视频号小店)可随意切换;免登录即可下单购物;支付对接易支付,微信支付宝双通道。
再往后翻,还有几句更关键的:支持开通分站,每个分站单独管理、单独绑定域名、单独设置授权到期时间。

看起来是个很轻的商城。但把这几个卖点翻译成技术语言,它的敏感面就露出来了:
易支付回调进来,系统据此判断这单付没付款,然后决定发不发货
分站是一套授权与到期的机制,谁有权、管到什么时候,全靠代码里那几行判断
没有账号体系,订单归属都是匿名标识,买家信息落到哪里、能被谁看到,是设计问题
宝塔部署、运行目录 public、后台路径固定,这些都是默认暴露面
真正让人决定写这一篇的,是源码站自己在详情页里留的那句话:
「里面有后门和一些乱七八糟的东西,已经清除,暂未发现其他问题」
这句话有两层意思。第一层是坦诚,值得肯定。第二层更值得琢磨:一个分发方愿意花时间清一遍后门,恰恰说明这类源码包里出现后门是常态,而不是意外。

所以这篇不谈它有什么功能,只谈一件事:当你手里有这么一份源码,上线之前该按什么顺序查一遍。
02
PART
审计路径:先钱,再权,最后数据
AUDIT PATH · ORDER
很多人拿到源码第一件事是翻目录结构,看看写得规不规范。这个顺序其实是反的。

规范的代码不代表安全,凌乱的代码也不代表危险。审计的效率,取决于你先看哪里。我通常按这个顺序走:
第一步看钱。支付回调是这类系统里唯一外部能直接触发、且能改变订单状态的入口。它排第一位,因为它是唯一一个「别人写请求、你的系统就发货」的地方。
第二步看权。也就是授权与身份判断:分站授权怎么校验、后台谁能进、订单谁能看。权限校验一旦在服务端漏了,前端做得再漂亮都等于零。
第三步看数据。上传的文件去哪了、数据库配置怎么存的、日志有没有开。这一层不产生漏洞,但决定一旦出事,你能不能查出来。
第四步才是入口收敛。后台路径、默认口令、数据库管理工具有没有暴露在公网、目录能不能被列出来。这些是配置问题,最容易改,也最容易被忽略。
这四步的顺序逻辑很简单:能被外部触发、且能直接造成损失的,优先看。
按这个路径,这套 H5 商城的审计点就排出来了。下面一个一个说。
03
PART
第一处:支付回调和那个「偷单」开关
PAYMENT · CALLBACK
先说个前提:以下所有判断,都不是「我发现了什么漏洞」,而是部署前你可以自己逐项核对的位置。任何源码包都适用这个框架。

关于支付回调,你要核对的只有两件事。
其一,回调有没有验签
第三方支付平台(比如易支付这类聚合通道)在回调时,正规做法是带上一份用商户密钥生成的签名,你的服务端拿到之后,用同一套规则重新算一遍,相等才认这单是真的。审计时就找支付处理相关的文件里有没有这一步验签调用,还是只读了订单号就直接改状态。
其二,金额有没有二次比对
回调里带回来的金额,和数据库里这笔订单原本的金额,是不是在校验之后才发货。不少「看起来能跑」的系统只校验订单号、不校验金额。这类系统一旦被外部摸到,损失是实打实的。

然后是「偷单」。
这套系统在 2026 年 2 月 7 日的一次更新中,新增了一个叫「偷单」的后台开关。官方说明写得很坦率:
启用后,系统将按照设定的间隔,自动将分站的订单偷到主站;被偷的订单在分站后台不显示,且不计入分站营业额统计;该功能仅对已付款订单生效。
这里不展开它的实现方式,只看它的性质就够了:
它让分站经营者看到的账,和系统里真实发生的交易,可以不一致。
而分站是什么?是这套系统的商业化方式——你开分站,别人给你卖货,你按授权给权限、按到期时间续费。这个模式下,分站经营者和主站之间本应有一份信任契约。一个能让主站静默搬运分站已付款订单、且在分站后台不留痕的功能,把这份契约直接架空了。
所以第三条核对项很明确:你部署时,这个开关默认是开还是关?谁有权把它打开?打开之后,分站的钱和账由谁说了算?这不是代码质量问题,是商业模式里的权力是否对等的问题。如果你打算拿它去招分站,这件事必须先有明确答案。
04
PART
第二处:分站授权,校验在服务端还是模板里
AUTH · MULTI-TENANT
分站机制的收益点在授权到期时间。所以审计的核心问题只有一个:
这个时间,是在服务端每次请求时判断的,还是只在后台页面上显示一下?
这两种写法的差别是生死级的。如果到期判断只出现在管理界面的渲染逻辑里,那它约束的是「看的人」,不是「系统本身」。规范做法是:所有涉及授权的业务入口,在服务端统一过一个授权中间层,过期即拒,与界面无关。
审计时怎么找?顺着分站相关的关键词去搜判断逻辑,看它出现在入口文件或统一中间件里,还是散落在个别页面的显示代码里。
同一个位置还要看第二件事:域名绑定是不是服务端校验的。
分站支持单独绑定域名,意味着域名成了租户标识的一部分。如果域名到分站标识的映射只在配置表里写死、请求传什么就用什么,那租户隔离就是形式上的。多租户系统的第一性原则是:租户身份必须由服务端从请求本身推导,而不是从参数里读取。
顺带说一句环境。详情页写的测试环境是 PHP 7.2 加 MySQL 5.6,另一个渠道的介绍里写的是 PHP 7.4 加 MySQL 5.7。同一个系统,两个来源的部署环境口径不一致——这类信息不对称本身就是信号,说明这份代码的版本演进没有被认真维护过。
而 PHP 7.2 已在 2020 年 11 月停止安全支持,MySQL 5.6 也早已结束生命周期。这意味着从那个时间点之后的所有安全修复,你都拿不到。如果这套东西要真上线,把运行时版本升上去,是加固清单里的第一条,没有商量余地。
05
PART
第三处:免登录的账,和那几个默认值
GUEST · DEFAULT VALUES
「免登录购物」是这套系统最大的产品卖点,也是最大的审计面。
它解决了转化率问题——买家不用注册就能下单。但它同时取消了传统电商里天然存在的一道保障:账号体系本身就是一种订单归属凭证。
没有账号,订单靠什么和买家绑定?如果靠浏览器指纹、靠 IP 加 UA 的临时标识,那这套体系里就有两个必查项:
订单详情是不是只凭订单号就能打开。只凭单号可访问的订单页,意味着订单号一旦被猜到或被批量试探,别人的收货信息就是敞开的。
收货地址缓存存在哪。系统写了地址输入一次、第二次下单免输入。体验很好,但这份缓存的存储位置和作用范围,决定了它是便利还是泄露面。
这两项不需要任何攻击手段就能自查:换一台设备、换一个网络,看你还能不能打开刚才那笔订单。能打开,就说明归属判定是弱的。
再往下是三个默认值,属于「五分钟能改、改晚了很贵」的那一类:
部署文档里写的是 /Mao_admin 这种约定俗成的路径,等于告诉所有人后台在哪
演示后台的账号口令就写在商品介绍里,下载包附带的说明文档往往还留着另一组;只要卖家在公开页面写过这个口令,它就必须被当作已经泄露
宝塔环境顺手就装了 phpMyAdmin,很多站点直接让它暴露在公网,这是最常见的一类失守
最后还有一个必须提的面:上传。
商城的商品图、详情图、批量导入的商品资料,都是上传入口。审计要看两点:后缀是否走白名单,以及上传目录是否禁止脚本解析(nginx 里对应一段 location 规则)。这条不管源码写得好不好,都该在服务器层面兜住。
06
PART
五步自查:不用工具也能走完
SELF-CHECK · FIVE STEPS
把上面三个审计点,压缩成一份可以直接照着做的自查流程。全程不需要任何渗透工具:
回调自查。找到支付处理相关目录,确认回调逻辑里存在验签调用,且发货动作发生在验签与金额比对之后。
开关自查。登录后台,确认偷单这类订单搬运开关处于关闭状态,并确认它有操作日志。
授权自查。检查授权到期判断是否在服务端统一入口执行;把系统时间往后调一年,看业务入口是否正常拒绝。
归属自查。换设备、换网络,尝试打开刚才的订单详情,确认需要额外凭证才能访问。
收敛自查。改后台路径、改所有默认口令、关掉数据库管理工具的公网访问、给上传目录加上禁止解析规则、开启错误日志。
五条走完,这套源码能不能上线,你心里就有数了。
07
PART
加固清单:十条照着改
HARDENING · CHECKLIST
如果决定继续用,下面十条按优先级排好了:
升级运行时:PHP 至少到 8.0 以上的受支持版本,MySQL 升到 5.7 以上或换 MariaDB。
支付回调补验签,金额二次比对,发货动作放在校验之后。
关闭偷单类开关,并给所有订单状态变更加操作日志。
授权判断下沉到服务端统一入口,删除模板层的授权显示逻辑。
改掉所有默认口令,后台路径换成自定义字符串。
后台加访问限制:IP 白名单,或者至少加一层独立的 Basic 认证。
上传目录禁止脚本执行,后缀走白名单。
数据库配置移出 Web 根目录,用独立低权限账号,关闭远程访问。
关闭调试模式,打开错误日志并设置轮转。
上线前做一次全量代码比对——尤其是入口文件、支付目录、公共函数库这三处,看看有没有你没写过的代码。
这十条里,前三条和第六条是「不做就会出事」的等级,剩下的属于迟早要做。
///
LAST
写在最后
CONCLUSION · THOUGHTS
别人帮你清过一遍,不等于你就不用再查一遍
这套源码真正有意思的地方,不在功能,而在它旁边那几行小字。
一个分发方主动告诉你里面有后门、我清掉了——这份坦诚值得肯定。但它也顺手说明了一件事:在源码分发的链条上,「可用」和「可信」是两个完全不同的评价维度。
功能齐全只回答了能不能用。后门清理只回答了这一遍有没有看到明显的东西。而这套代码在我这台机器上、以我的钱和数据为代价运行时会不会出问题——这个问题,只有你自己按路径查一遍才能回答。
分发的链条越长,最后一棒的责任就越重。而最后一棒,永远是你。
资源来源:源码库 bbbb.bid拿到任何源码,第一件事是审后门。涉及支付和资金流转的,审计标准还要再提一档。本文仅为源码层面的技术拆解与审计方法分享,不含任何资源获取方式,也不提供任何绕过、利用或攻击方法。文中所有审计项均为部署侧可自行核对的检查点。关注星标公众号,不定期分享源码干货与安全审计笔记。
既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
THANKS FOR READING