51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

支付宝支付对接之支付漏洞产生

今天在看到某公众号一篇文章,大致内容是说的某某卖酒的商家 APP 支付接口未做金额效验,导致某某利用一分钱批量购买一堆高价酒的事情;

像这种支付漏洞,前几年挺流行的,不过现在基本都修复了,似乎成为程序员必修课了。。。

看了文章我产生了2个疑问:

  1. 这个漏洞是如何产生的?我们知道是没有对金额效验导致,但是为什么没有对金额效验?难道支付宝不效验这个吗?
  2. 我博客面板也有支付功能,本人一手对接的,我还真没效验过金额,那么是否会存在这个问题呢?

抱着这个想法,我先修复了下面板激活处 BUG,折腾了好久,原因是异步通知不会获取用户cookie,然后我代码中使用 WP 内置函数调用 cookie, IF 判断一直进不去,最后改成数据裤调用即可,表示开发太难了[aru_15]

回到正题,BUG 修复完,马上抓包测试了一波,总结如下:

  • 支付宝并不会效验金额,也不能效验金额,它只会根据你提交的订单信息来为你生成和处理订单,这也就是为什么会出现这类一分钱刷单漏洞了。
  • 金额不可控状态下,也就是金额后端代码写死,这种情况下即使前端修改金额,也无法创建订单,因为支付效验接口失败。
  • 金额可控状态下,如果回调通知不做金额效验,那么会产生一分钱刷单漏洞。

修复方案:

支付宝服务器异步通知页面,或者支付宝服务器同步通知页面的业务逻辑代码增加一个 IF 判断 即可

/* 
	异步验证数据处理
*/
//$total_amount 是 POST 接受到的金额变量
if($flag) {//验证成功
`if( $title == 'Mr.Wu-面板激活' && $total_amount='100.00' ){
        //业务处理代码
    }
`
}

赞(0)
未经允许不得转载:工具盒子 » 支付宝支付对接之支付漏洞产生