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

Mr.Wu 6,970 0 正在检测是否收录...

今天在看到某公众号一篇文章,大致内容是说的某某卖酒的商家 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' ){
            //业务处理代码
        }
}

打赏
发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ