单机也安全: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的完整收银系统:从编译到部署的全链路》