在线支付流程安全分析与支付漏洞总结

  前言

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

  支付宝/在线支付流程

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

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

(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 防重放

原文地址:https://www.cnblogs.com/rambo-yi/p/9694012.html

时间: 2024-10-11 00:34:11

在线支付流程安全分析与支付漏洞总结的相关文章

支付宝支付流程与RSA算法原理

支付宝支付流程与RSA算法原理 RSA加密算法的原理 支付宝的三种支付流程 1.所有的支付逻辑处理,全在服务器完成,现在被淘汰了 原理就是电商App吧所有的信息提交给电商服务器,然后又电商服务器与支付宝服务器进行交互 2.所有的支付逻辑处理,是电商APP调用手机的支付宝客户端,然后由支付宝客户端和支付宝服务器进行交互处理. 原理就是电商APP向电商服务器发送请求,然后电商服务器生成订单信息 后,返回给电商APP,电商APP进行付款时,需要进行判断用户有没有支付宝客户端. 如果没有,则不能支付,提

易宝支付流程

1. 获取易宝的API 获取API的第一步,要在易宝上注册一个账号,这个账号是商家的账号,后面买家付款后,会将钱款存入该账号中,然后商家自己提取到银行卡,易宝在提取过程中收取一定的手续费.这就是易宝的盈利模式.但是注册成功需要前提,那就是自己得有一个网站,或者是一个公司,吧啦吧啦等东西,反正就是你得有资格申请,这点易宝会审核的,满足了才会允许你注册,才会给你提供他们的接口,不是所有人都可以注册的.我用的也是别人注册好的,我自己啥也没有……也没法注册……屌丝一个,大家懂的~但是一般在公司里开发的话

如何对软件支付流程进行测试?才能更安全的买买买!

现在有不少测试朋友做的项目中,可能也会涉及到支付相关的功能.比如:做商城的,做游戏的以及其他在线交易的网站.APP等.如果支付出了问题,或者用户拿少的钱通过篡改请求数据购买大金额的商品,如果是实物的话,发货前还有可能被发现.如果是虚拟商品话费.游戏币等就有可能造成损失. 所以,不管是实物也好,虚拟商品也好,涉及到支付功能时,大家在测试的过程中一定要重视,否则,会造成很大损失. 前几天也有小伙伴在评论区留言问我:支付这一块如何进行测试? 那我们今天就来说说支付流程的测试点,废话不多说,来进入我们今

支付流程安全设计

1.总体流程图 2.流程说明:          由以上流程图可知,整个流程分为:订单生成.支付和后支付验证3个阶段. 2.1.订单生成: 威胁分析:          该阶段最容易犯的错误是根据前端提交的参数来计算应付款额,比如:相信前端提交过来的产品单价,甚至直接在前端计算应付款额再提交给后台进行处理,这种方式的攻击成本非常低,只需要简单篡改数据即可.正确的做法应当是对物品进行编号,根据前端提交的物品编号和数量来计算应付款额,具体步骤如下: 2.1.1.步骤1:          为不同的物

第三方支付平台业务分析

何为第三方支付平台 我们把时间往前推15年,1999年的时候国内的电子商务开始起步,一些电商网站开始运行.理论上人们可以通过网络进行支付.购物.用户在网上下单,支付,然后商家收到钱后发货,用户收到货物感觉非常嗨皮,一次美好的网购旅程结束了.但有时并不那么嗨皮,这种流程因为在支付和收货之间存在时间和空间上的距离,那么问题就来了,不是挖掘技术哪家强,而是用户和商家难以在彼此信任的问题上达成一致,用户担心我给了钱,商家不发货:商家担心如果先发货,用户不付钱.为了解决这种尴尬,第三方支付平台诞生了. 第

Java生鲜电商平台-电商支付流程架构实战

Java生鲜电商平台-电商支付流程架构实战 说明:我一直秉承的就是接地气的业务架构实战.我的文章都有一个这样的核心. 1. 业务场景 2. 解决问题. 3.代码实现. 4.代码重构. 5.总结与复盘. 6.缺点与防范 一.场景描述 想必大家都曾遇到过这个问题,在电商购物的过程中,已经走到了最后一步:去支付.这个时候突然意识到商品数量不对,或者收货信息选错. 除此之外,用户还存在之下返回的原因: 误点击,也就是说用户还是想买的: 犹豫中点了返回,想买的欲望不是十分坚决: 坚决不买了. 二.可选方案

iOS 微信支付流程详解

背景 自微信支付.支付宝支付入世以来,移动端的支付日渐火热.虚拟货币有取代实体货币的趋向(这句纯属扯淡,不用管),支付在app开发中是一项基本的功能,有必要去掌握.从难易程度上讲,不管是微信支付还是支付宝支付都是非常简单的,因为第三方的支付文档非常详细,而且他们内部的安全性也非常高.作为使用这些支付策略的我们,只需要掌握流程,能够实现正常支付的功能即可.为什么要写下这篇博文,原因有二.其一,微信支付流程中有坑,其二,以后忘记了可以拿出来看看. 配置 1.微信支付需要两个账号,财付通和微信开发者,

微信支付开发 c# SDK JSAPI支付开发的流程和微信大坑

微信支付开发流程 1. 开通微信支付功能 省略 2. 下载微信的C#版的微信SDK 下载连接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 各个版本的都有,可惜咱最熟悉C# 我的下载时间是2016-02-28日,所以所有的流程都是基于这个版本的SDK. 3. 配置各种参数 首先在微信支付的开发配置中配置发起支付的路径如下: 代码的solution中找到lib的config.cs文件,如下图,所有的参数都在这里,这里配置

iOS app集成支付宝支付流程及后台php订单签名处理

iOS app集成支付宝支付流程 1: 开通支付宝商户 由公司去支付宝 https://b.alipay.com/order/serviceIndex.htm 签约支付宝开通支付宝商家: 2:商户支付宝开通无线支付功能 开通商户支付宝之后,虽然可以获取到应用使用的 key和id,如果如果不开通无线支付功能的话,会在app集成的时间 提示商户未开通无线支付功能的错误: 开通商户支付宝-无线支付功能,请在商户支付宝后台,按要求提供审核材料开通: 3:在商户支付宝后台下载SDK 在商户支付宝后台,即可