单机也安全:7个中间件守护的收银系统

单机也安全:7个中间件守护的收银系统

老张问:“我的收银系统,会不会被人黑了?”
技术员说:“放心,7道锁守着呢。”

01 第一道锁:JWT认证 + Token吊销

登录后发JWT令牌(8小时过期),登出即加入黑名单作废。每次请求验证令牌有效性 + 是否已吊销。

02 第二道锁:角色权限(RBAC)

admin全权限,staff只能点餐/收银/启停售/退款/核销。后端直接拒绝,不是前端隐藏按钮。

03 第三道锁:强制改密

重置密码后首次登录强制修改。不改密码只允许访问3个端点(修改密码/个人信息/登出)。密码要求≥6位且含字母+数字。

04 第四道锁:登录锁定

连续输错10次锁定10分钟。暴力破解一天最多试1440次。

05 第五道锁:API限流

端点 限制
登录 10次/分钟
支付回调 100次/分钟
支付/核销/退款 10次/分钟
修改密码 5次/分钟

滑动窗口限流,超限返回429。

06 第六道锁:上传防护

图片解码重编码(剥离恶意内容)+ 安全文件名(防路径穿越)+ 路径校验(禁止系统敏感目录)。

07 第七道锁:请求体限制

所有API请求body限制2MB,防止内存溢出。

技术实现

中间件链

RequestID → RealIP → Logger → Recovery → CORS → MaxBodySize(2MB)
    ↓
JWT认证 → Token吊销 → 强制改密 → RBAC → 限流 → 业务Handler

Token吊销机制

登出时Token加入内存黑名单,TTL与JWT过期时间一致,过期自动清理。

强制改密中间件

MustChangePwd=true 时只放行3个端点,其他全部返回403。

限流器

内存级 sync.Mutex + map[string]*attemptInfo,滑动窗口 + 封禁期,后台goroutine每5分钟清理过期条目。

总结

7道锁,层层设防。单机版也需要安全,因为收银系统里存的是真金白银。


下期预告:《12MB的完整收银系统:从编译到部署的全链路》