今天在看到某公众号一篇文章,大致内容是说的某某卖酒的商家 APP 支付接口未做金额效验,导致某某利用一分钱批量购买一堆高价酒的事情; 像这种支付漏洞,前几年挺流行的,不过现在基本都修复了,似乎成为程序员必修课了。。。看了文章我产生了2个疑问:
- 这个漏洞是如何产生的?我们知道是没有对金额效验导致,但是为什么没有对金额效验?难道支付宝不效验这个吗?
- 我博客面板也有支付功能,本人一手对接的,我还真没效验过金额,那么是否会存在这个问题呢?
- 支付宝并不会效验金额,也不能效验金额,它只会根据你提交的订单信息来为你生成和处理订单,这也就是为什么会出现这类一分钱刷单漏洞了。
- 金额不可控状态下,也就是金额后端代码写死,这种情况下即使前端修改金额,也无法创建订单,因为支付效验接口失败。
- 金额可控状态下,如果回调通知不做金额效验,那么会产生一分钱刷单漏洞。
/*
异步验证数据处理
*/
//$total_amount 是 POST 接受到的金额变量
if($flag) {//验证成功
if( $title == 'Mr.Wu-面板激活' && $total_amount='100.00' ){
//业务处理代码
}
}