任何一个开发者都可以快速的将“钱包”服务

2018-10-03 16:34 来源:未知

  首页教育信息化中国教育网络研究与发展学术论坛

  电子商务已经成为当今互联网中重要的组成部分。同时“钱包”类服务成为了电子商务的关键组件。越来越多的电商服务通过“钱包”服务来进行支付。“钱包”提供的接口简单易用,任何一个开发者都可以快速的将“钱包”服务供应商提供的SDK整合进自己的App中,提供App内的快速支付手段。目前国内最大的“钱包”类服务包括:支付宝钱包、微信钱包、百度钱包等。

  因此,支付过程的安全问题也成为了关键。如果钱包服务出现了安全漏洞,那么很可能会影响到成千上万的商家,数十亿的现金流,后果往往非常严重。对于支付平台的安全研究从其诞生之日起就开始了。经过数次血的教训,几大支付平台均修正了数个大大小小的漏洞,反复改进设计和实现。如今的支付平台已经相当安全可靠。

  本文对借助支付平台进行的支付流程进行分析,对支付平台的安全进行讨论。同时我们展示了商户端和支付平台出现过的几个严重安全漏洞。攻击者通过这几个安全漏洞可以达到修改金额、任意购买等效果,使得支付平台和商户的利益受到巨大损失。本文中涉及的安全漏洞均已得到修正。

  目前市场上的大大小小的第三方支付平台有许多家,规模有大有小但是从整个支付流程上看这些支付平台的同质化程度很高。只有少数很大的支付平台做出了比较大的改动,进一步增强了安全性。我们对支付平台普遍采用的支付协议做以下介绍。

  在支付流程中主要包括四个实体:商户前端、商家服务器、钱包模块,以及钱包服务器。商户前端是用户直接交互的部分,用户通过操作商户前端来购买商品等。这里商户前端不仅限于移动设备上安装的App,也可以是商家提供的网站。商家服务器是商户的后端,提供相应的服务。钱包模块是进行支付的“中介”,如支付宝、微信钱包、百度钱包等都有对应的支付模块。通常支付模块可以是用户App中的一个SDK,与商户App一起安装在用户的手机上。支付模块也可以以web的形式提供服务。钱包服务器负责处理支付请求,并通知商家服务器支付结果。钱包服务需要与钱包模块交互以获得订单信息,同时需要与相关的机构(例如银行)进行扣款处理,最后与商家服务和钱包模块进行通信以通知支付结果。因此整个支付过程是一个“四方通信”的过程。一笔成功交易的后面通常包含四方之间数十次的复杂交互,任何一个环节的安全隐患都会扩大整个支付过程的攻击面。多个安全隐患的叠加可能使得攻击者可以进行订单篡改等攻击,使用户、商户、钱包服务的利益受到损失。

  4.钱包与钱包服务器通信,钱包服务器进行扣款,通知钱包和商户服务器支付结果。

  1.商户前端与钱包模块进行通信,对钱包进行初始化。在这个过程中通常需要用户登录自己的钱包账户,进行必要的认证等操作。

  3.商户前端与商家服务器通信,建立订单。带有的参数通常包括用户信息、需要购买的商品id、时间戳、商品金额、钱包类型等。

  4.商家将订单参数返回给商户前端,带有的参数通常包括:订单号(order_no)、支付金额(total_fee)、支付结果通知地址(notify_url)、消息完整性签名(sign)等。此时也有另一种实现,即虚线’中,商户服务将大量参数直接通知给钱包服务,而只返回给用户一个简短的消息,包括一个钱包服务返回给商家服务的交易事务id。此后用户只需通过钱包对这个交易事务id进行支付即可。

  6.钱包模块与钱包服务进行交互,带有的参数包括用户的钱包session等信息,以及步骤4中返回的订单信息等。

  7.钱包服务在进行必要的扣款处理(如与银行进行交互)和风控处理后,将支付结果以同步通知7(1)和异步通知7(2)的方式分别通知钱包模块和商户服务。在支付结果通知中一般包括支付结果、支付金额、支付的订单号、支付事务的流水号、商户号,以及消息完整性签名等。可选的参数包括商品信息、字符集/编码方式、币种信息等。商户服务器在获得7(2)的异步通知后,也需要验证其消息的完整性,并对订单状态进行对应的更新(支付成功或者支付异常)。

  8.钱包模块接收到钱包服务返回的同步通知后,进行必要的完整性验证,并将支付结果返回给商户前端。

  9.商户前端得到钱包模块返回的消息,验证其完整性。若获得的是支付成功的消息,则需要向商户服务器发起请。