二维码支付原理分析及安全性的探究

“二维码支付”安全么?

1   引言

随时支付宝和微信的线下不断推广,目前使用手机进行二维码支付已经逐渐成为一种时尚了。

但是大家有没有思考过:这种便捷的支付方式到底安不安全呢?今天我们就针对这个话题来进行一些探讨吧。

2   二维码简介

先来简单说说二维码:二维码是用一定规则排布的点阵的图像来编码信息的方式。与二维码对应的是传统的“条码”(一维码)。

和“条码”一样,二维码具有如下特点:

  1. 容易生成
  2. 容易被机器识别

但是“二维码”具有更多的优点:

  1. 高容错性
  2. 搞污损能力
  3. 高密度的信息承载能力

二维码曾被腾讯公司总裁 马化腾 誉为:连接线上和线下的通道。

随着支付宝,微信,微博等厂商的大力支持和推广,二维码的应用已经逐渐成为生活中随处可见的应用图案了。

当然,大家最熟悉的使用场景肯定是:移动支付。也是本期重点讨论的领域。

3   支付场景

  • 身份二维码
  • 收款二维码
  • 付款二维码

大家可以使用第三方应用扫描微信或者支付宝提供的二维码,可以获取其中代表的含义。比如:两种应用互扫二维码。

3.1   身份二维码

微信 身份二维码:

http://weixin.qq.com/r/L-rg_G-EbIITrZub0097

支付宝 身份二维码:

https://qr.alipay.com/apa2uu7j3tpjyxlr00

不难看出,身份二维码实际上有用的信息就是指定的URL后面的一个串号。这个串号具有如下特点:

  1. 一直固定不变
  2. 无法通过此串号获取用户信息
  3. 仅能被自己的app识别其深层含义(自家app查询自家数据库),客户app扫码后,将弹出相应的显示详细身份或者加好友的界面

这样很好地兼顾了 隐私性 和 开放性 。

3.2   收款二维码

使用UC来扫微信和支付宝的收款二维码。

微信:

https://wx.tenpay.com/f2f?t=AQAAAEBfhXKNRIQUrs6fy4XO8p879

支付宝:

https://d.alipay.com/i/index.htm?b=RECEIVE_AC&u=mGnPJ/rNBfKKKKKDcQlNGn1mthWAVDa7vw00ow5sM4o=

明显看出,换了一个API,同时后面带上一串和用户账号无关串号。此串号具有如下特点:

  1. 一直固定不变
  2. 无法通过此串号获取用户信息
  3. 仅能被自己的app识别其深层含义(自家app查询自家数据库),被客户app扫描后,客户app直接调出向对方账号付款的界面

3.3   付款二维码

在付款二维码上,微信 和 支付宝 是差不多的,都是一串每分钟就会变一次的一串数字:

284308793673642130

此二维码信息具有如下特点:

  1. 是一串不带API的纯数字串
  2. 每分钟变一次
  3. 通过指定的SDK以此数字为参数进行接口调用可以完成扣款

其实上本质上就是一个付款账号。然后扫码时自动输入这个串号,通过第三方客户端调用支付平台SDK即可以完成扣款。

此扣款场景及规则如下:支付平台默认只要用户主动出具了二维码,就表明进行了授权扣款,这有点类似于在校园卡在食堂的作用一样,小额交易免除了繁琐的授权流程了。

关于付款二维码和之前的二维码的区别如下:

  1. 永久不变 和 每分钟必变
  2. API+参数 和 纯参数

关于第一点的解释,笔者在此插播一个现实生活中的小故事:

在某早餐店, 笔者问店主:为何不做个二维码放墙上? 店主说:那玩意经常变,我们就不知道怎么弄了。 笔者笑:你说的是付款二维码,那东西如果不变,传播出去后,你的钱会被人随便扣,但是你的收款二维码,你是不是还会担心别人随便给你转钱呢? 店主立刻明白了,笑:当然不会,别人不断给我汇款,我高兴都还来不及呢。

所以,用户只是担心自己的钱可能被不知情的情况下被划走,但是肯定是不会担心别人给自己汇款的,这就很好的解释了 “不变” 和 “变” 的区别了。

关于第二点的解释:

  1. app上的扫码所对应的场景众多,必须要做一定的区分,所以带上API名称
  2. 条码枪对应的场景单一,仅仅只是扣款,所以二维码只需要对参数进行编码即可

4   本节小结

通过本文的实验和介绍,大家应该对自己手机中的支付app的二维码是怎么回事有大致的了解了吧,后面一节将从安全性上对它们进行分析,敬请期待。。。

5   概述

前面的章节我们讲了支付宝和微信的二维码的主要信息载体,本部分则开始讨论其安全风险问题。

6   安全风险

关于二维码的风险问题主要从如下几个方面来说:

  1. 隐私问题

    是否出现用户的私有信息随着二维码的传播而被泄露,给用户千万困扰的问题

  2. 越权问题

    是否出现违反用户意途的越权操作问题

7   隐私问题

在前面对二维码承载的信息的分析如此可以看出,用户私有的一些信息:

  1. 真实姓名
  2. 账号明文
  3. 手机号码

都并没有体现在相应的参数当中,黑客很难根据那一串无意义的数据获悉二维码背后的真实的用户信息。当然,除非黑客攻陷了微信或者支付宝的数据库了,这基本上不太可能。通过这些串号获取到的用户昵称和头像也仅仅限制在当前app中。

8   越权问题

身份二维码。这个因为单方面加了好友后,是需要二维码身份主人进行验证,所以不存在越权问题。

收款二维码。正如上一文中提到的,如果有人未经当事人同意“越权”给当事人转账,你会有意见么?

付款二维码。有过在超市支付宝付款经历的人肯定知道,掏出手机,亮出二维码,收银员条码枪一过,一秒过后,钱就被扣走了。如果要说有直接的金钱损失,可能就是这个地方了吧。下面我们来细说此场景。

9   越权扣款

在前面的文章中提到,付款二维码具有如下特点:

  1. 一分钟强制变一次
  2. 能且只能被使用一次

设想这样的场景:

超市里面,收银员A在零售系统中核算出商品价格,顾客B亮出付款二维码,A拿起条码枪扫码,完成扣款,钱从B的账号进入到A所属的公司中。

那么这里面是否存在 越权扣款 的漏洞?

我的回答是:有,但是这需要我们大开脑洞才能想到。

由于二维码是一种通过光线视觉来传递信息的方式,而且二维码出示的时候,并不会指定要扣款给谁,所以在顾客B出示二维码到被收银员A扫码之间的空档里面,可能会被别人截获。

当然,我们现在都不考虑一些网络通路被攻破,数据通讯被劫持和篡改的情况,就按照正常的流程来走。顾客B出示了二维码,然后由C通过设备直接提前识别了二维码,并完成了扣款。

这个C有如下可能:

  1. 隐藏在旁边某人衣帽里面的针孔摄像头
  2. 附近大厅上方的某个已经“叛变”的监控摄像头
  3. 旁边某个玩手机的路人甲乙丙丁
  4. 带着眼镜的斯文四眼仔

他们的共同特点就是:

  1. 快速识别二维码。通过光学识别设备(即摄像头)即可。
  2. 拥有扣款的资格,黑客有各种办法使用冒牌身分获取到此资格。
  3. 能快速完成识别和扣款。目前的机器视觉和后续的自动化扣款程序可以实现。

假如我们这个脑洞成真了,那么就是这样的场景了:

  1. 顾客B掏出手机展示付款码
  2. 在收营员A扫码前B已经被扣款
  3. 环顾周边的购物的人山人海,并没发现可疑的人
  4. 找相关机构报案,数额太少,浪费自己的时间不划算
  5. 如果自己时间不值钱,坚持报案,数额不少,不予以立案
  6. 顾客B不相信社会了,再也不用这种付款方式了

10   小结

本节的脑洞开得有点大了。但是到底是不是耸人听闻了,还真不一定。虽然这两家公司的开发人员和产品人员也并不是吃白饭的,但是黑客和黑产从业人员也更不是吃白饭的。

11   概述-3

在上一章节里面,我们提到过,其实支付厂商和技术人员和黑产从业人员技术孰高孰低,还真不好说。但是我们目前还是尽力相信暂时正方是占据上风的吧,那么支付服务厂商到底做了哪些措施来保证这个安全呢?我们可以来分析一下。当然,本文的定位还是给技术小白的简谱吧,技术大牛面前还是属于献丑了。

12   风险控制

虽然确实存在以上漏洞,但是其实细心的用户可能注意到了,微信和支付宝尽力地做了相应的措施:

  1. 对申请扣款资格主体身份进行严格审核,虽然说不能百分百,但是还是可以极大增加假冒门槛。当然厉害的黑客还是有办法过。
  2. 设立资金保险。当然,估计并没有多少人去投保了。
  3. 限额。将这种扣款方式进行限定,将其局限在小额场景。但是每次被扣除个几百块,也还是有点心疼的吧。

直接出示付款码,让对方扫码扣款,这种方式确实是自己目前体会到的最便捷的支付方式了。但是这种方式存也确实存在一定的安全风险,所以用户在使用时,请养成良好的习惯,让二维码暴露在公众视野下的时间尽量短,看到的人尽量少。否则,稍微的疏忽就成了黑客们线下薅羊毛发家致富的场景了。

13   方案建议

关于此“安全漏洞”,在技术流程上的解决方案是:

在扫码之后,加入“用户确认”环节, 要求用户在自己的app上做一个简单的交互,表示自己 知晓 并 认可 当前的扣款行为。

当然,这个“简单” 最后加一道确认环节,关于这个环节,我们可以头脑风暴一下,我先说下自己的“脑洞”:

  1. 加一个类似苹果开机的滑动解锁确认
  2. 指纹确认(对于有指纹模块的手机来说不错)
  3. 做一个按钮图标,需要用户长按2s确认
  4. 要求用户摇一摇把钱甩出去(扫码后,做个图片:钱一半在口袋外面了)
  5. 要求用户对着手机吹一口气把钱吹出去(吹气后,加个钱被吹走的动画)

大家有看到这几个构想的,如果觉得比较好,请转达给微信或者支付宝的产品经理,如果被采用了,请给我发个红包哦(手动龇牙表情)。

14   结论

虽然本文有点脑洞大开,只是希望大家能明白:我们享受到了新型的便捷的付款方式的同时,其实是牺牲了一定的安全性的。在商场使用刷卡支付,刷卡后输入密码,虽然麻烦,但是却有一个重要的“用户确认环节”,还是能避免掉意外扣款。当然这也是产品的权衡了,看这个风险出现的概率是否值得提供商牺牲掉好的付款体验了。

现在还没有出现那种被机器视觉薅羊毛的扣款事件吧,也不知道今后会不会有,希望是我杞人忧天了吧。

转自:https://www.cnblogs.com/beer/p/6918180.html

转载于:https://www.cnblogs.com/duanxz/p/7488798.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python创建一个包,如何从python包创建一个osx应用程序/ dmg?

我不知道正确的方法,但是这种手动方法是我用于简单脚本的方法,似乎已经适当地执行了。我会假设我所在的任何目录,我的程序的Python文件都在相对的src /目录中,我要执行的文件(具有正确的shebang和执行权限)被命名为main.py。$ mkd…

自定义类加载器

转载自:http://www.cnblogs.com/xrq730/p/4847337.html 为什么要自定义类加载器转载于:https://www.cnblogs.com/IvySue/p/7490656.html

guice spring_Spring vs Guice:重要的一个关键区别

guice spring根据弹簧对象的名称识别它们 不管使用XML还是Java配置都没有关系&#xff0c;Spring范围大致类似于Map <String&#xff0c;Object>结构。 这意味着您不能有两个名称相同的对象 。 为什么这是一件坏事&#xff1f; 如果您的大型应用程序具有许多Configuratio…

query row php,php – 如何在Codeigniter上使用$query- row获取类对象

我目前正在使用Codeigniter框架.在下面的代码中,我想获得一个Animal_model对象,而不是stdClass对象.class Animal_model extends CI_Model{var $idanimal;var $name;public static $table animals;function __construct() {parent::__construct();}function getone(self $anim…

vue2.0版本指令v-if与v-show的区别

v-if&#xff1a; 判断是否加载&#xff0c;可以减轻服务器的压力&#xff0c;在需要时加载。 v-show&#xff1a;调整css dispaly属性&#xff0c;可以使客户端操作更加流畅。 v-if示例&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF…

oracle 中增加行,Oracle中实现FORM表单插入、锁定、更新行、删除行的包

此包写在oracle数据库中&#xff0c;供Form表单调用&#xff1a;CREATE OR REPLACE PACKAGE BODY cux_main_pkg AS/*** PROCEDURE: insert_row()***/PROCEDURE insert_row(x_row_id IN OUT VARCHAR2,x_insp_header_id IN OUT NUMBER,p_org_id IN…

IE8兼容问题

setInterval 的用法如下&#xff1a; function func() { setInterval("alert()", 1000, this); // chrome 适用, 但不能传参数 setInterval("alert", 1000, this); // chrome、ie8 都不适用 setInterval(alert, 1000, this); // chrome 适用&…

CUBA平台正在开源

期待已久的时刻已经到来&#xff0c;现在我们很高兴地宣布&#xff0c; CUBA平台终于加入了自由软件社区&#xff01; 从现在开始&#xff0c;平台的所有运行时部分都是开源的&#xff0c;并根据Apache 2.0许可进行分发。 这意味着您将完全可以免费创建和分发应用程序&#xff…

oracle 9i 手工建库,简单记录Oracle 9i数据库手工建库过程

简单记录Oracle 9i数据库手工建库过程Oracle 9i手工建库By Oracle老菜今天客户要用oracle 9.2.0.5&#xff0c;aix 6.1已经不支持了&#xff0c;只好从别的数据库把软件拷贝过来重编译。但是建库只能用手工建库了。很久没有使用手工建库了&#xff0c;简单记录下建库过程1.设置…

LazyInitializationException的四个解决方案–第2部分

本文从本教程的第1部分继续。 有状态EJB使用PersistenceContextType.EXTENDED进行负载收集 该方法只能应用于与Full JEE环境兼容的应用程序&#xff1a;将EJB与PersistenceContextType.EXTENDED一起使用。 检查下面的代码&#xff0c;DAO的样子&#xff1a; package com.ejb…

SecureCRT在卸载时似乎会同时删除系统自带的Consolas字体

今天卸载了SecureCRT的安装板&#xff0c;改用绿色版&#xff0c;没想到删完之后再运行ItelliJ IDEA&#xff0c;所有的字包括行号都变成乱码了&#xff0c;而且这些乱码并不是很乱&#xff0c;英文大部分都是注音符号&#xff0c;中文字还能正常显示&#xff01;仔细查看各种编…

SpringBoot:使用JdbcTemplate

Spring使用JdbcTemplate在JDBC API的基础上提供了一个很好的抽象&#xff0c;并且还使用基于注释的方法提供了强大的事务管理功能。 首先&#xff0c;通过注册DataSource &#xff0c; TransactionManager和JdbcTemplate Bean&#xff0c;快速浏览一下我们通常如何使用Spring的…

混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型&#xff08;Mixtures of Gaussians&#xff09;和EM算法 这篇讨论使用期望最大化算法&#xff08;Expectation-Maximization&#xff09;来进行密度估计&#xff08;density estimation&#xff09;。 与k-means一样&#xff0c;给定的训练样本是&#xff0c;我们…

wordpress archive.php,wordpress分类目录模板(archive.php)制作

本课程视频是VIP会员课程&#xff0c;学习请进入VIP学习区。分类目录模板通常包括二种&#xff0c;一种是普通文章列表目录&#xff0c;一种是产品图片展示列表目录。文章列表目录是通过将分类下的文章标题通过无序列表的形式展示出来。如下图。产品图片列表目录是将产品的第一…

oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table

Oracle 12.1新特性----使用RMAN从备份中实现recover table发布时间&#xff1a;2020-06-26 19:41:44来源&#xff1a;51CTO阅读&#xff1a;4750作者&#xff1a;hbxztc在Oracle12c版本之前&#xff0c;使用RMAN能恢复的级别为数据库级别和表空间级别&#xff0c;如果只有一张表…

spring social_Spring Social入门–第2部分

spring social几周前&#xff0c;我写了一篇文章&#xff0c;展示了我认为可以使用Spring Social编写的最简单的应用程序。 该应用程序读取并显示了Twitter用户的公共数据&#xff0c;并被编写为Spring Social和社交编码领域的介绍。 但是&#xff0c;让您的应用程序显示用户的…

【luogu 1024 一元三次方程求解】二分思想

题目出自luogu 1024 一元三次方程求解 描述&#xff1a; 有形如&#xff1a;ax3bx2cxd0 这样的一个一元三次方程。给出该方程中各项的系数(a&#xff0c;b&#xff0c;c&#xff0c;d 均为实数)&#xff0c;并约定该方程存在三个不同实根(根的范围在-100至100之间)&#xff0c;…

linux c统计进程网络读写,linux网络分析、性能分析、文本格式化、文件读写操作之利器(mtr、top、jq、sponge)...

好的工具能够让我们工作更加高效&#xff0c;结合工作中的情况&#xff0c;今天分享下linux下比较好用的几个工具。网络分析工具mtrmtr是网络链路检测判断问题非常好用的工具&#xff0c;集成了tracert和ping这两个命令的功能&#xff0c;动态的输出检测结果。mtr 默认发送icmp…

局域网(校园网)内服务之间通过ssh -L互相访问

一、前言 同一个局域网内有两台linux服务器A和B&#xff0c;B上有一个服务&#xff0c;可以通过curl传输数据访问&#xff0c;现在想从A上也通过curl访问B上的服务 二、两种情况 1. 如果B服务器上使用docker: 首先建立docker容器时&#xff0c;需要做端口映射 docker run …

ubantu 中配置Flash Player

1.Flash只能在Chrome中使用它的最新版本。 2.如果你使用的是Firefox浏览器&#xff0c;那么你需要更换浏览器才能使用最新版本的Flash。如果你使用的Chrome浏览器&#xff0c;你只需要将它升级到最新版本就可以了。 转载于:https://www.cnblogs.com/saturnlee/p/7502158.html