安全观察 | PAYMENT SECURITY
“焚决”背后:一段短脚本,暴露了支付系统的信任边界
从一段浏览器脚本,看支付流程里最容易被忽略的“默认信任”。
导读 | READING MAP
01 浏览器不应拥有支付通道的决定权
02 异步清算为何会形成权益先开通的时间窗口
03 服务端闭环,才是支付风险的根本修复方式


01 OVERVIEW
一段脚本,并不神秘
最近圈子里流传着一个叫“焚决”的东西,名字取得确实挺玄乎,不知道的还以为是什么高深秘术。
结果拿到手一看,其实就是一段不长的浏览器脚本。
别看代码不多,它盯上的地方却很关键。说白了,它不是去攻击账号密码,也不是直接入侵服务器,而是盯上了网页前端和后端之间那层“默认信任”。
02 TRUST BOUNDARY
真正被撬动的,是前后端之间的“默认信任”
很多人平时用网页订阅服务,基本都是点击升级,然后填卡号、付款,最后开通会员。看起来流程很简单,但背后其实会先经过一层判断。
比如说,系统会根据账号地区、网络环境、账户状态等信息,决定你该走信用卡、银行卡,还是其他付款方式。
正常来说,前端只是负责展示页面,真正决定用户能不能使用某个支付通道,应该由后端说了算。
但有些平台的设计并没有那么严谨。
如果前端拿到一个“你可以使用某支付方式”的结果后,直接相信了这个结果,并且立刻渲染出对应的付款页面,那么问题就来了。
毕竟浏览器是用户自己的环境。
网页上的内容、接口返回的数据、前端执行的逻辑,理论上都有可能被本地脚本干预。要是支付通道的选择仅仅依赖前端收到的一段数据,那就等于把一道本该在服务端完成的判断,放到了用户眼前。
这也是这类问题最值得关注的地方。
不是说脚本有多复杂,也不是说某个支付工具有多神奇,而是平台把一个关键决策交给了客户端。

TRUST BOUNDARY
客户端本身,就是最不可信的地方。
03 ASYNC PAYMENT
异步清算,如何放大风险窗口
尤其是一些异步支付方式,风险会更明显。
实时验证
像信用卡付款,基本都是实时验证。卡号对不对、余额够不够、需不需要二次认证,通常在用户点击支付的那一刻就会有结果。
过不了就是过不了,基本没什么空子。
异步清算
但有些银行扣款、转账类方式不一样。
它们在提交付款信息之后,并不会马上完成最终清算。平台可能先收到一个“请求已提交”的状态,然后先把会员权益开通,等后面银行系统真正处理扣款。
问题就在这里。
如果平台过早开通权益,而后面的资金确认又需要一段时间,那中间就会出现一个短暂的时间窗口。
从用户角度看,会员已经到账了,高级功能也能用了。
但从支付系统的角度看,钱其实还没有真正确认收到。
这类设计在正常用户眼里没什么问题,毕竟大部分人都会正常付款。但从安全角度看,只要前端支付通道可以被干预,再叠加异步确认机制,就很容易被人盯上。
04 RISK CONDITIONS
四个条件叠加,问题才会失控
所以说,这种问题本质上并不是某个平台独有的漏洞。
它更像是一类通病。
只要一个订阅平台同时满足几个条件,就需要格外注意:
第一
支付方式由前端接口返回决定。
第二
前端拿到结果后可以直接切换付款页面。
第三
存在需要延迟确认的支付方式。
第四
平台在真正确认收款前,就先把付费权益开通了。
这些条件单独看起来都不算太严重。
但凑到一起,问题就不小了。
05 ROOT CAUSE
脚本只是放大器,不是根因
很多人看到这种事件,第一反应都是“这脚本真厉害”。
其实真不是脚本厉害。
脚本只是把原本就存在的信任边界问题放大了而已。
ROOT CAUSE
真正该反思的,是支付系统的设计逻辑。
06 SERVER SIDE
支付决策,必须回到服务端
一个比较稳妥的做法,还是让支付决策在服务端完成闭环。
前端可以展示付款页面,但不能决定付款页面。
用户最终走信用卡还是银行扣款,是否具备某种支付资格,是否允许使用优惠,是否能够立即开通订阅,这些都应该由服务端根据账号状态重新确认。
而不是前端拿到一个字段,就直接相信它。
另外,对于需要延迟清算的付款方式,也不要急着把完整权益全部开通。
可以先显示“支付处理中”,等资金真正确认后,再激活高级功能。
虽然说这样做会让流程稍微慢一点,但总比后面出现批量滥用、退款纠纷和风控事故要好得多。

07 USER REMINDER
低价权益背后的代价
对普通用户来说,这类事情其实也有一个提醒。
网上那些来路不明的低价会员、共享账号、所谓内部渠道,看着确实便宜,但背后很多并不是什么正规优惠。
有些是短期权益,有些会被追回,有些账号本身就存在安全风险。
到头来省不了多少钱,账号、隐私甚至支付信息反而可能搭进去。
∞ CONCLUSION
信任边界错了,问题还会再出现
所以说,工具本身没什么神秘的。
真正值得记住的,是它暴露出来的一个问题:
只要平台把关键判断交给了客户端,把服务开通放在付款确认之前,再复杂的支付体系,也可能被一段很短的脚本撬动。
技术总会迭代,脚本也总会失效。
但信任边界一旦设计错了,换个名字、换个平台、换种支付方式,同样的问题还会再出现。
学习&合作,移步公众号:zzksvip
本文来自:幸运周,不代表网络进化录立场。如若转载,请注明出处:https://www.52thing.com/28820.html
微信扫一扫
支付宝扫一扫