一、前言在之前的系列文章中我写了 LikeShop 多商户版的部署配置、秒杀性能优化和数据迁移上线流程。这一篇把视角转向安全——多商户系统的安全加固比单商户更复杂因为它多了一层商户维度的数据隔离。多商户系统在工程层面本质上是一个多租户系统需要在一套系统中承载多个相互隔离但共享基础能力的业务单元面临的挑战包括商户数据严格隔离、商品/订单/支付等能力共享。一旦隔离机制出现漏洞A 商户可能看到 B 商户的订单数据这是最致命的业务风险。这篇文章从后台权限、接口鉴权、支付回调防护、数据隔离四个层面给出一份可直接落地的安全加固清单。二、后台权限加固2.1 RBAC 权限模型LikeShop 的权限控制体系基于经典的RBAC基于角色的访问控制模型设计通过用户-角色-权限的三层关联结构实现权限管理。核心逻辑是先创建角色并分配权限再创建管理员账号并绑定角色。不同角色拥有不同的菜单访问权限和操作权限。后台支持按角色分配权限可以给财务、跟单、仓管、运营等不同岗位配置不同的操作权限。2.2 多商户版的权限分层多商户版的权限模型比单商户版多了一个层级平台 → 商户 → 子账号。平台端拥有最高权限可以管理所有商户、审核入驻申请、配置平台抽佣比例商户端只能管理自己店铺的商品、订单、结算等数据子账号商户可以创建多个子账号按角色分配不同权限2.3 加固要点第一权限校验必须在服务端强制执行。前端隐藏菜单按钮只是“体验优化”不是安全措施。所有管理后台的接口必须通过AuthMiddleware进行权限校验。二开时新增的管理接口务必确认已注册到权限节点中。第二低权限账号不能越权操作高权限功能。官方已明确管理后台、商家权限做角色分级接口增加路由权限校验防止低权限账号越权操作高权限功能。二开时新增的接口要明确归属到对应的权限节点。第三定期审计角色权限。检查是否存在权限过大的角色比如普通运营账号拥有财务提现权限及时收敛。三、接口鉴权加固3.1 Token 鉴权机制LikeShop 的接口鉴权基于Token实现。所有需要登录的接口必须在 Header 中携带token参数参数名类型说明tokenstring验证令牌所有需要登录的接口必填versionstring客户端版本所有接口都需要传token 值必须放在 Headers 中不能放在请求参数里。Token 的生成和管理由UserTokenService负责UserTokenService.php中的$userSession-token create_token($userId)负责创建 token 记录。管理后台的 token 过期时长配置在server/config/project.php的admin_token中默认 8 小时。3.2 接口响应中的鉴权信号LikeShop 的接口返回值中code字段有明确的鉴权含义code 值含义1操作成功0操作失败-1需要重新登录token 失效2打开新页面前端请求封装层捕获到code: -1后会自动清除本地 token 并跳转登录页。3.3 加固要点第一生产环境必须使用 HTTPS。Token 在 HTTP 明文传输时容易被中间人截获。LikeShop 支持 HTTP 和 HTTPS但生产环境建议强制使用 HTTPS。注意使用 HTTPS 时如果 SSL 证书不被支付宝认可可能导致支付回调失败。第二合理设置 token 过期时长。管理后台的 token 默认 8 小时过期商城用户的 token 过期时长在project.php中配置。过期时间过长会增加 token 泄露的风险过短会影响用户体验。第三接口参数必须严格校验。新增接口时参数校验要覆盖类型、长度、格式和边界值。LikeShop 的Validate层提供了统一的验证器机制所有输入参数都应经过验证。四、支付回调防护支付回调是安全攻击最集中的环节——伪造回调可实现“0元下单”重复回调可能导致订单被重复处理。4.1 多商户版的回调地址LikeShop 多商户版的支付宝回调地址是域名/api/pay/aliNotify对应文件是server/app/api/controller/Pay.php。注意这个地址和单商户基础版的域名/api/payment/aliNotify不同配置支付时务必确认版本对应的地址。4.2 四层防护机制第一层签名校验。微信、支付宝等回调接口会严格校验签名、订单编号、金额和渠道信息杜绝伪造回调。微信支付 API V3 的回调验签遵循标准流程获取平台证书 → 构造验签名串 → 获取应答签名 → 验证签名。第二层金额校验。验签通过只代表请求来自微信不代表金额正确。回调报文中的金额必须与订单金额比对防止篡改。第三层幂等控制。微信支付的回调机制是“至少一次”投递如果商户服务器没有及时返回 SUCCESS微信会在短时间内多次重试。幂等处理依赖唯一订单号 状态校验根据回调报文中的out_trade_no查询订单如果订单已经是“已支付”状态直接返回 SUCCESS不再重复执行后续逻辑。第四层状态机校验。订单状态变更必须经过状态机的合法性校验。LikeShop 把订单建模为有限状态机核心迁移路径为 CREATED → PAYING → PAID → DELIVERING → FINISHED。状态变更必须具备原子性——更新订单状态和扣减库存在同一事务中完成。4.3 加固要点第一回调地址必须使用 HTTPS。如果 SSL 证书不被支付宝认可会导致回调失败。第二回调接口要限制访问来源。虽然验签是第一道防线但可以在 Nginx 层额外限制回调接口的请求来源 IP微信/支付宝的服务器 IP 段减少恶意请求对系统的冲击。第三回调日志必须完整记录。每次回调的原始报文、验签结果、处理结果都要记录日志方便排查“用户说支付了但订单没变”的问题。五、数据隔离与防越权5.1 水平越权防护水平越权是指用户 A 通过篡改请求参数比如把订单 ID 改成用户 B 的订单 ID查看或操作他人数据。官方已明确修复订单、售后、分销、会员数据均增加数据归属校验用户仅能操作、查看自身相关数据彻底解决水平越权。LikeShop 的做法是在 Logic 层增加归属校验。比如查询订单详情时不仅要根据order_id查询还要加上user_id 当前登录用户的条件。5.2 商户数据隔离多商户版的数据隔离是多租户架构的核心。商户数据必须严格隔离防止越权访问。LikeShop 的订单、售后、分销、会员数据均增加了数据归属校验。商家端的查询接口会自动加上shop_id过滤条件确保商家只能看到自己的数据。5.3 加固要点第一所有查询必须带归属条件。二开时新增的查询接口必须显式加上数据归属条件。不要依赖“前端传的 user_id 是可信的”这种假设。第二避免直接使用前端传入的 ID 做查询。比如查询订单时应该用where(id, $id)-where(user_id, $this-userId)而不是find($id)。第三商户维度的接口要校验 shop_id。商家后台的接口必须校验当前登录商家是否有权操作目标数据。六、部署层面的安全加固6.1 必须关闭调试模式生产环境的server/.env文件中APP_DEBUG必须设为false。调试模式开启时会暴露详细的错误堆栈包含数据库连接信息、文件路径等敏感内容。6.2 修改后台默认访问路径官方建议修改后台默认访问地址避免被暴力破解。默认的/admin/login路径是攻击者最先尝试的目标可以通过 Nginx 配置一个自定义路径。6.3 禁用弱密码和开启登录保护官方建议禁用弱密码开启登录验证码、异地登录校验。这些功能在管理后台的安全设置中配置。6.4 限制敏感目录访问在 Nginx 配置中禁止访问敏感文件和目录location ~ ^/(\.env|\.git|runtime|install) { deny all; }6.5 定期备份和更新定期备份数据库限制服务器目录权限避免误操作或攻击导致数据丢失。同时保持 LikeShop 版本更新——历史漏洞均集中在 v2.5.7 及更早的停止维护版本当前最新版本已彻底修复。七、安全加固检查清单检查项配置位置优先级生产环境关闭 APP_DEBUGserver/.env高强制使用 HTTPSNginx 配置高回调接口验签开启Pay.php/PayController.php高订单数据归属校验Logic 层高商户数据隔离校验Logic 层高接口权限节点注册AuthMiddleware高修改后台默认路径Nginx 配置中禁用弱密码管理后台安全设置中开启登录验证码管理后台安全设置中定期数据库备份宝塔计划任务中限制敏感目录访问Nginx 配置中定期更新 LikeShop 版本官方仓库中八、总结LikeShop 多商户版的安全加固核心可以概括为四条线后台权限基于 RBAC 模型平台 → 商户 → 子账号三层权限分层所有接口必须经过服务端权限校验。接口鉴权Token 放在 Header 中传递code: -1表示需要重新登录生产环境强制 HTTPS。支付回调防护签名校验 → 金额校验 → 幂等控制 → 状态机校验四层机制缺一不可。多商户版的回调地址是域名/api/pay/aliNotify。数据隔离所有查询必须带归属条件商户维度的接口必须校验shop_id杜绝水平越权和跨商户数据泄露。安全加固不是一次性的工作而是持续的过程。建议把上面的检查清单保存下来每次二开新增功能或上线前逐项核对。本文基于 LikeShop 多商户版 源码及官方安全公告整理不同版本的代码路径和配置方式可能略有差异请以实际源码为准。
企业数字化 ERP 产品动态
相关推荐
LikeShop 数据迁移与备份:从本地到生产环境的上线流程 一、前言
在之前的系列文章中,我写了 LikeShop 多商户版的部署配置、秒杀性能优化和前后端分离部署。这一篇把视角拉回到上线前的最后一步——数据迁移与备份。
很多开发者把“上线”理解为“把代码传到服务器、配好 Nginx”,然后导入一个空的数据库开始… · 2026/9/26 11:12:44
LikeShop 二开规范:安全扩展功能而不破坏核心链路 一、前言
在之前的系列文章中,我写了 LikeShop 多商户版的安全加固清单,从后台权限、接口鉴权、支付回调防护和数据隔离四个层面给出了加固方案。这一篇换个角度,聊的是二开过程中如何“安全地加功能” 。
先说一个我见过的真实场景。有个团队… · 2026/9/26 11:12:44
CSP-S 2026 初赛试题解析(第三部分:完善程序题(第一题))精讲 同学们,今天我们要去一个神奇的图论王国探险!这个王国里有许多城市,城市之间有道路连接。每条道路都带着一个特殊的符号: 道路:走过它,权值增加 1。- 道路:走过它,权值减少 1。我们的… · 2026/9/26 11:12:44
基于Halcon+C++的芯片缺陷检测系统:从算子映射到工程落地 简介:面向毕业设计与课程开发,这份基于Halcon与C的芯片缺陷检测系统源码,完整覆盖图像预处理、特征提取、缺陷判别的项目链路,适合具备C基础并希望接触机器视觉的学生参考复用。工程采用MFC多页面交互框架,集成引脚检测… · 2026/9/26 11:46:55
OpenClaw 飞书 CLI 实战:用 TaoToken 统一 Key 打通 AI 消息流 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:46:48
问卷星自动填写脚本原理与实战:DOM操作+事件模拟+Tampermonkey封装 简介:这是一份面向前端开发者与自动化测试初学者的浏览器端轻量级工具脚本,用于辅助问卷星平台表单的快速随机填写,解决人工重复填答效率低、样本采集耗时等问题。资源包共5个文件,含核心功能脚本(.js)、3个… · 2026/9/26 11:46:48
Notepad++主题配置全指南:语法高亮、JSON/Python适配与XML定制 简介:本资源是一套专为Notepad用户定制的29款高质量主题集合,适用于前端开发、代码编辑及日常文本处理场景,尤其适合追求个性化编辑界面与提升编码舒适度的中高级开发者。压缩包内全部为.stylers.xml格式的主题配置文件,共29个&am… · 2026/9/26 11:46:48
DOS命令实用指南:从文件操作到批量处理与虚拟机粘贴 不少朋友一听到“DOS命令”这四个字,第一反应是“上个世纪的东西”,觉得现在有鼠标有图形界面,谁还用这个。但真到了工作上,你会发现命令行还是那根最靠谱的救命稻草——批量改文件名、按日期建目录、跨机器拷贝命令、写个一键备份… · 2026/9/26 11:46:48
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46