前言

大家对支付漏洞的理解通常都是篡改价格,已有的对支付漏洞的总结也是对现有的一些案例的经验式归类,没有上升到对在线支付流程深入分析的一个层面。这里尝试从分析在线支付流程,在线支付厂商的接入方式开始,深入业务分析整个在线交易流程中容易出现的安全问题。

支付宝/在线支付流程

支付宝即时到账接口开发流程

在线支付从功能上来说是通过支付宝的支付渠道,付款者直接汇款给另一个拥有支付宝账号的收款者。整个流程说明如下:引用自支付宝文档。

(1)构造请求数据
商户根据支付宝提供的接口规则,通过程序生成得到签名结果及要传输给支付宝的数据集合。
(2)发送请求数据
把构造完成的数据集合,通过页面链接跳转或表单提交的方式传递给支付宝。
(3)支付宝对请求数据进行处理
支付宝得到这些集合后,会先进行安全校验等验证,一系列验证通过后便会处理这次发送过来的数据请求。
(4)返回处理的结果数据
对于处理完成的交易,支付宝会以两种方式把数据反馈给商户网站。
程序上自动进行重新构造URL地址链接,在用户当前页面上通过自动跳转的方式跳回商户在请求时设定好的页面路径地址(参数return_url,如果商户没有设定,则不会进行该操作)
支付宝服务器主动发起通知,调用商户在请求时设定好的页面路径(参数notify_url,如果商户没有设定,则不会进行该操作)。
(5)对获取的返回结果数据进行处理
商户在同步通知处理页面(参数return_url指定页面文件)或服务器异步通知页面(参数notify_url指定页面文件)获取支付宝返回的结果数据后,可以结合自身网站的业务逻辑进行数据处理(如:订单更新、自动充值到会员账号中等)。

业务思考

通过这个流程可以知道。应用端做的两个重要步骤,一个是拼接支付的请求,返回给用户浏览器,用户浏览器请求支付宝接口,进入支付流程,整个支付的环节是和支付宝端交互,支付完成之后,支付宝通过通知接口给应用发送支付成功的通知。应用通过支付宝的通知信息来判断支付是否成功。

风险分析

首先第二步,发送请求数据。这一步虽然是在用户的浏览器端完成的。但是支付接口都有强制的签名来保证完整性,所以这里数据是无法篡改的,在签名key不泄露的情况下。所以通常见到的支付漏洞都是第一步,应用构造请求数据的时候出现的缺陷。

对于交易这一业务功能来讲,应用只需要用户提供商品id和商品数量就可以满足支付所需要的所有数据了。这个地方容易出现的问题主要有以下几种:

1,直接把订单的总金额从客户端获取,放在了构造的请求交易数据中。
2,虽然只传递商品id和数量,但是数量没有做白名单限制,造成可以输入负数或者大数造成计算溢出,导致最终计算的订单金额出现错误。
3,除了商品数量和商品id,还有其他参与订单金额计算的参数从客户端获取,比如运费等

第三步和第四步是支付宝进行的处理,所以也不存在问题。第五步,支付宝通知应用用户付款成功,这里支付宝设计了notify_id供应用来验证通知信息是否是有效的。但是一般很少见人用,因为这一步数据也是有签名的。只要应用对支付宝的通知信息进行签名验证就可以。但是这个验证是应用自己来控制的,并不像第二步是支付宝控制的进行签名验证,所以一旦应用没有对支付宝通知信息进行签名验证就会导致伪造支付宝的通知信息,欺骗应用支付成功的漏洞。这种类型的问题看到的案例比较少。比如我是如何1元再购特斯拉的。这种类型的问题应该也比较常见,可能是对这个逻辑的测试还不够关注。

所以通过分析整个在线支付的流程可以看到,容易出现支付漏洞的有两个点,一个是构造支付请求的阶段,一个是对返回的结果数据进行处理的阶段。没有对签名进行验证,会存在请求伪造和重放攻击。这里分析的是一个典型的支付流程,此外还有一些比较复杂的交易设计,比如设计了可以修改订单的功能等,随着功能的增加也会引入一些安全问题。

安全的设计方案:

只从客户端获取商品id和数量,对数量范围进行限制。对接受支付宝通知的接口对通知信息进行签名验证,对支付金额和订单金额进行对比以及验证支付订单号避免重放攻击。只要考虑到这几个问题,就可以设计一个比较安全的支付流程。

支付宝提供的验证方式

notifyid
total_fee
sign
order_no 防重放

参考资料

乌云drops

原文地址: http://xdxd.love/2015/12/02/%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E%E6%80%BB%E7%BB%93/

支付漏洞总结 / 在线支付流程安全分析相关推荐

  1. PrestaShop支付接口-网银在线支付,在线支付收款,外贸收款

    2019独角兽企业重金招聘Python工程师标准>>> 国内第一家支持prestashop中文支付接口网银在线-chinapay 需要请联系QQ:1285872439 PrestaS ...

  2. java在线支付---13.java在线支付所有源码:

    13.java在线支付所有源码: 创梦综合技术qq交流群:CreDream:251572072 ------------------------------------- a.新建工程payment ...

  3. php微信扫码支付pc端,PC端(电脑端)微信扫码支付和支付宝在线支付(ThinkPHP3)...

    操作步骤: 1.修改配置文件 Application/common/conf/config.php $arr = array( 'DB_TYPE' => 'mysql', 'DB_HOST' = ...

  4. 微信扫码支付html,pc端微信扫码支付和支付宝在线支付

    本DEMO演示了PHP支付宝和微信扫码在线支付,支付成功后,在回调地址显示支付相关信息. 难易:中级 下载资源 下载积分: 888 积分 操作步骤: 1.修改配置文件 Application/comm ...

  5. [支付]支付宝支付(网银在线支付)

    将数据post打包发送给支付宝的服务端自动跳转到支付宝官方支付界面 转载于:https://www.cnblogs.com/luoxiaolei/p/4582528.html

  6. 银联在线支付对接流程以及签名算法

    银联在线支付 简介 银联在线支付支持PC网关.手机SDK.WAP网关.云闪付等多种支付场景,其中云闪付产品可以完美支持ApplePay.Samsung Pay.Huawei Pay等市面上常见的手机厂 ...

  7. [6] 支付漏洞( 0 元购 )

                                                                                        <目录> 原理:支付 ...

  8. 一文带你全面了解电商在线支付

    本文由作者 书丰 发布于社区 在电商系统中,方便的在线支付功能大大推进了电商的发展,可以说没有在线支付的发展就没有今天发展完善的电商系统,本文就来讨论一下在线支付相关的内容. 01 网银支付 1. 什 ...

  9. 电商在线支付学习摘录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.网银支付 1.什么是在线支付 2.主流在线支付类型 3.电商常见在线支付类型 4.支付角色 二.第三方支付 1.第三方支 ...

最新文章

  1. 聊天宝彻底凉了,遭罗永浩抛弃,团队就地解散
  2. HALCON示例程序edge_segments.hdev提取连续的边缘段
  3. html中评论应该怎么写,HTML-评论
  4. Jmeter plugins 之 Perfmon Metrics Collector(服务器性能监控)
  5. 为什么我的mysql比redis快_为什么redis是单线程的以及为什么这么快?
  6. 首发量产1亿像素,小米新机宣布11月5日发布!
  7. APP移动测试用例总结
  8. Trick(十二)——统计 label(序列)各个标签值出现的次数以及出现次数最多的标签
  9. js原型和原型链_初识JS原型/原型链/原型继承
  10. 时间线MindMap里程碑的使用方法
  11. Chrome 地址栏 Google 搜索错误处理 隐私设置错误 您的连接不是私密连接
  12. h5策划书_DIYH5|3.12世界睡眠日H5策划方案
  13. 获取微信运动 php,微信运动数据抓取(PHP语言)
  14. 为perf4j提供集中式监控项目perf4j-dashboard
  15. 哔哩哔哩 机器人历险记_机器人历险记谁演的,机器人历险记的扮演者罗德尼资料介绍-易看TV...
  16. 北京公交计次IC卡利弊分析
  17. WAF是干什么的 有哪些功能
  18. 谷歌移动UI框架Flutter教程之Widget
  19. TRS复合矩阵的拆解
  20. Java项目:网上水果超市商城设计和实现(java+SSM+springboot+redis)

热门文章

  1. 浪潮服务器nf5270m5做raid_服务器安装第一步RAID配置——企业服务器常用RIAD技术介绍及配置...
  2. 雷神Spring实验23
  3. PMP第5章知识点回顾,练习题
  4. 比较PostgreSQL与MySQL两大开源关系数据库管理系统
  5. 在Swagger中,如何给暴露的接口及其参数添加说明描述?
  6. 医院消防安全巡检系统
  7. html语言熟记,html基础必备知识点
  8. 百度地图鼠标绘制获取坐标点
  9. 微信内置浏览器第三方登录qq
  10. 64位murmurhash 源码