PHP转新能源小程序,半年月入12万?大模型安全工程师的冷静审视
|
接口背锅。又是接口背锅。上个月新能源小程序上线前四十八小时,PM冲进站会说“支付回调超时得压到三百毫秒以内”,我当场笑出声——不是冷笑,是真笑了,笑完自己都愣了一下。因为那个回调根本没走我们服务,它连网关都没进,卡在前端 SDK 里做签名重试,第七次才把 payload 塞进 Kafka。测试当天晚上十一点半,前端小哥发来截图:console 里飘着三行红字,其中一行是 `Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://pay.xxx.com') does not match the current page's origin`。没人改 CORS 配置,但灰度开关没推完,灰度用户一半走旧 H5 支付,一半走新小程序,旧 H5 的 postMessage 白名单里压根没写小程序域名。这事儿跟大模型安全有半个毛关系?没有。可那天凌晨两点,DBA 在群里艾特我:“你确认下 token 解析是不是加了 new Date().getTime() 做 salt?”——我回他:“我没碰过 token 逻辑。”他回:“哦,是你们组去年一月重构的 auth 中间件。”我原以为他说的是我写的,结果翻 Git 记录发现是我带的实习生写的,他转正前最后三天改的,commit message 写的是“fix: 防重放”,没写为啥用时间戳当 salt。这个我敢打包票。
文章配图,仅供参考 月入十二万?去年一月我亲手拆过他们那套“新能源小程序 SaaS 后台”的 auth flow。三个接口共用一个 JWT 校验中间件,但其中一个接口(就是那个查充电桩实时状态的)被前端偷偷绕过校验,直接透传 user_id 和 station_id 给下游,理由是“省掉一次 Redis 查询”。结果呢?上周监控告警,某省公司运维反馈:“为啥同一个账号能查到隔壁市所有桩的离线记录?”——因为 user_id 是明文塞进 URL query 的,base64 一下就完事,而那个“防重放”的 time salt,刚好被 nginx upstream 负载均衡器的 retry 机制干掉了三次,第三次请求带着两秒前的 timestamp 过来了,signature 检验照样过。所以不是“半年速成”,是半年堆漏洞堆出来的 DAU 假象。优胜劣汰?对。淘汰的是不看 referer、不校验 appid、不鉴权 webhook 回调的团队。活下来那个,不是技术强,是运气好没被黑产盯上第一周。oncall 手机震了一下,我顺手摸出来看——不是告警,是物业群消息,说楼下充电桩新装了两个枪口,扫码就能充,不用小程序。咖啡杯上印的公司 logo 是三年前设计的,蓝色渐变太浅,洗三次就掉色。我盯着那点褪色的蓝,想起前天跟产品吵:她说“用户根本分不清‘授权地理位置’和‘允许推送’的区别”,我说“那你别让定位权限弹窗里混着营销 push 开关”,她说“运营要 A/B 测试”。结果 A/B 测试测出个 bug:iOS 用户勾选“允许位置”后,系统自动把“通知”也默认开了,但安卓不会。测试妹子提单的时候写了句:“复现路径复杂,建议降为 P2”。我改成了 P0,并加了一句:“因为攻击面从 1 个扩到 3 个:位置泄露 + 推送 token 泄露 + 用户设备指纹关联。”她回了个“????”,然后去倒了杯水。水是凉的,保温杯底下垫着张报废的 SOC2 审计整改清单,第三条写着:“未限制第三方 SDK 权限申请粒度”。 KPI 刷到 78% 的时候,我删了自己写的所有 prompt injection 测试用例。不是放弃,是发现他们连 SQL 注入都懒得修——小程序后台导出 Excel 的那个 API,input 参数里 embed 了一个 order by 字段,类型校验是 `if (!/^[a-zA-Z_]+$/.test(input)) return error`。去年一月我提过,说这玩意儿早晚被拿去跑 `order by (select 1 from mysql.user limit 1)`。没人理。结果真有人试了,还是个学生,在 GitHub issue 里贴了完整 exploit。运营看到后第一反应是删 issue,第二反应是让我“看看有没有办法从日志里捞出他的 IP 然后拉黑”。我说“日志里只记到 Nginx upstream peer”,她说“那就 upstream peer 加黑名单”。我原以为她是不懂,后来发现她懂,只是觉得“黑产又不刷我们日活,管他干嘛”。监控大屏上一个无关曲线抖了一下,是 CDN 带宽峰值,跳了零点三秒,然后回落。没人截图,也没人问为什么。 我不屑说“转型容易”,但更不屑听“月入十二万靠的是技术”。那是靠 PM 不敢问 DBA “为什么索引失效”,靠测试漏掉七个边界 case,靠法务没审出来隐私政策里那句“可能与第三方新能源数据服务商共享您的充电记录(含起止时间、地理坐标、电池 SOC)”。最离谱的是,他们连 LLM 微调都没做——所谓的“智能推荐桩位”,就是把历史充电数据按城市+天气+星期几 group by 之后 hardcode 了八条规则,其中一条是:“若用户上次充电在雨天且晚于 20:00,则下次优先推室内停车场桩”。谁写的?前端。为啥?因为后端说“业务逻辑不该放在服务端”。这话我听着耳熟,就像当年有人说“加密该放客户端”。我原以为他们在防 MITM,结果人家只是怕改后端要走发布流程。所以现在怎么办?我正在写一份内部风险快报,标题还没定,但正文第一句我写了:“请勿将小程序 SDK 当作信任边界。”后面空着。不知道写给谁看。反正下周我要飞合肥,去看他们刚上线的换电柜实车联调,据说用了新协议,叫 XCP-NB。我连协议文档都没见着。先去问问能不能借个工装裤穿——现场灰尘大,咖啡杯上的logo得护住。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


PHP Web安全实战:SQL注入防护精要