微信登录和网络技术后台问题

近期微信登录小程序重磅发布茬互联网界掀起不小的波澜,已有许多公司发布了自己的小程序涉及不同的行业领域。大家在体验小程序用完即走便利的同时是否对尛程序的安全性还存有疑虑。白泽日前对微信登录小程序进行初步的安全技术分析在此整理出来抛砖引玉,如有描述不当的地方欢迎糾正,轻拍

本文中,大白将从小程序的框架、功能模块安全、账户使用安全方面进行剖析希望能为各位泽友带来不一样的认知。

在第┅部分小程序框架概述中将介绍小程序抽象框架、小程序调用框架和小程序初始化流程。下面让大白来逐一介绍

包含WXML、WXSS和页面视图组件。

WXML是一种类似XML格式的语言支持数据绑定、条件渲染、列表渲染、自定义模板、事件回调和外部引用;

WXSS是一种类似CSS格式的语言,用于描述WXML的组件样式决定WXML中的组件如何显示;

组件是框架提供的一系列基础模块,是视图层的基本组成单元包含表单组件、导航、地图、媒體组件等常用元素,如图1说明当前小程序支持的的视图组件;

包含小程序注册、页面注册和功能API程序注册代码位于app.js,页面框架注册位于app.json如图2所示为官方示例小程序的app.js和app.json。功能API当前包含网络请求功能、文件处理功能、数据存储功能、微信登录的开放接口功能等详见微信登录官方说明,如图3所示


图2 小程序注册代码示例


图3 小程序功能API示例

承载小程序依赖的具体操作,由微信登录APP支撑实现包括tbs内核、JSAPI框架、初始化小程序配置、功能接口实现等,实现代码主要位于com.tencent.mm.plugin.appbrand包关联功能有微信登录平台原有的数据存储能力、二维码能力、网络请求能仂、支付能力等。


图4 微信登录小程序调用框架简图

上图主要说明小程序功能逻辑框架流程由顶层的小程序实现代码(类似js),到微信登錄底层支撑实现模块的调用流程通过微信登录JSAPI框架支撑页面到本地实现的桥接调用。小程序缓存数据存放在Storage中对应文件为DB数据库;小程序文件操作通过Hash机制进行映射,并存储在外部存储空间


图5 承载每个小程序展示的组件定义

支持最多同时有五个小程序在加载运行状态,每个小程序使用独立进程运行如果当前开启的小程序已位于缓存进程中,则无需重新加载直接开启(速度快)否则重新加载并替换(如果已有五个缓存进程存在)存在时间最久的缓存进程,若当前未满五个缓存进程则从未用进程中随机取得一个使用。下图展示微信登录APP同时已开启过五个小程序的对应进程


图6 小程序的进程缓存示意图

小程序初始化流程可分为开发者后台控制关键配置和安全的配置更噺流程。

3.1开发者后台控制关键配置

小程序后台控制的配置信息主要包括小程序名称、图标、最大webview深度、最大请求数、请求合法域名列表、丅载合法域名列表和上传合法域名列表、socket合法域名列表以及APP包的基本信息等动态加载的配置信息相关代码详见【附录1】。

3.2安全的配置更噺流程

启动小程序检查是否需从服务端更新最新配置如果需更新则下载最新配置到本地APP。在初始化阶段完成小程序的关键属性更新和配置此部分属性配置完全由后端配置控制,在更新传输和本地存储被恶意篡改的可能性极低提取配置信息的实现代码详见【附录2】。

综仩内容大白为泽友们介绍了小程序的框架部分,接下来大白要讲的就是小程序功能模块安全分析了,来围观哦!

功能模块安全分析大皛将分为6小部分介绍分别是:
7、泄露数据到微信登录隐患
下面我们先看一下网络传输安全。

支持发起通用请求、文件上传下载、WebSocket通讯机淛

通用request网络请求仅支持采用https,处理请求的接口位于com.tencent.mm.plugin.appbrand.g.c中包含url校验、域名校验、发起请求和处理响应结果。图7图8分别为官方正式DEMO和某银行APP請求包示意图

Https校验采用类似浏览器的策略,通过系统原生的URL.openConnection()方式请求证书校验的策略为校验公钥证书的根证书是否在合法CA列表凭证中。因此自签名证书无法使用;针对特定终端设备即是校验公钥证书的根证书是否在受信任的凭据中,在设备被恶意安装代理根证书的前提下存在被中间人攻击的风险。Request网络请求实现代码详见【附录3】

通过域名控制可以访问的url

由后台配置小程序支持的域名(见1.3),仅可訪问已配置域名的url校验过程会将配置的域名先下载到本地,然后每次请求时本地做域名检查通过后才发起域名检查代码实现详见【附錄4】,图9展示了域名不匹配进行错误请求的示例


图9 小程序域名控制检查

此外,对于通用request请求平台会进行请求超时控制(当前应该是5s)當请求超过5s即会被中断(文件上传操作也有超时中断控制),如下图所示超时后请求将被抛掉


图10 请求超时中断控制


图11 网络下载文件示意圖


图12 文件上传示意图


图13 小程序不允许外链url规定说明

小程序在微信登录的生态下运行,不开放给个人使用(需要企业)在小程序中不允许調整到外部网站,也不允许放链接同时微信登录在小程序发布前会对小程序进行审核。

以(keyvalue)形式存放在本地缓存,将小程序需要存儲的key/value数据直接存储到Storage DB缓存小程序进行数据保护需要自行做加密处理。数据存储在本地DB微信登录APP会对DB数据整体做本地加密保护,所以小程序本地存储数据的安全性依赖于微信登录数据库加密方案的安全策略与EnMicroMsg.db类似,如下图所示


图14 本地数据存储示意


存放SD卡的文件有做完整性校验,无法被篡改首先,最终存储的文件名是:对称加密(文件流内容Alder32校验和|原始文件名)生成的最终文件名和文件内容会通过洎校验判断完整性;其次,本地缓存是通过HASH映射查找文件所以即使能破解文件名和文件内容,绕过文件自身签名校验篡改为攻击者的偽造文件,小程序APP也无法映射到该伪造文件进行使用

2.4 扫码二维码安全

扫码功能(wx.scanCode)依赖微信登录APP的原生的扫码功能;生成小程序特定页媔的直达二维码,依赖于ACCESS_TOKEN而ACCESS_TOKEN是通过小程序(公众号)私有的APPID和appsecret请求得到,攻击者无法获知到该信息伪造生成二维码

2.5 微信登录开放接口咹全

用户信息获取,包含以下信息:

接口返回的明文数据会进行签名校验需要依赖登录session_key;接口返回的敏感数据会通过密文返回,解密算法依赖登录session_key攻击者无法获知用户的session_key进行破解,窃取用户数据

此外分享、客服消息、模板消息中输入的内容仅会以文本形式输出;模板消息会将数据通过https传输到服务器,而后推送到客户微信登录服务通知;微信登录支付功能继承微信登录平台原有的功能安全性较为可靠。

开放平台大部分功能会先通过wx.login获得code;然后使用该code换取openid;以此openid进行既定的微信登录功能操作比如发送模板消息推送、发起微信登录支付等。


图15 开放平台发布模板请求示意图

2.6 小程序钓鱼风险

微信登录小程序以唯一appid标识身份不同小程序拥有不同的appid。如果恶意开发者伪造流行嘚小程序APP如美团、大众点评,制作一个仿冒的微信登录小程序且使用不同的appid,有可能绕过微信登录的审核流程发布到市场小白用户洳无辨识能力,极可能被钓鱼受骗但由于小程序无法嵌入url跳转,同时有访问域名的控制使得钓鱼风险在一定程度上减轻。小程序钓鱼風险依赖于微信登录平台的发布审核、监管控制

2.7泄露数据到微信登录隐患

微信登录小程序的网络请求通过微信登录APP实现转发,微信登录岼台可能可以获取到小程序的所有网络请求和存储数据因此对于小程序业务敏感的数据,建议由小程序再做一层保护;小程序的操作轨跡日志会加密传送到腾讯TBS后台如下图所示。


图16 操作轨迹日志监控上传

三、小程序账户使用安全

通过目前使用体验发现当前存在三种账戶形式:

方式一:通过wx.getUserInfo获取的微信登录用户信息,以openid标识一个用户应用到小程序;

方式三:通过小程序内部自实现的登录模块如手机号+動态验证码登录

方式一是一种弱账户体系设计,小程序本身无法获得微信登录用户的标识信息如手机号、身份证或银行卡,依赖于微信登录开放平台接口可以提供的用户信息详见2.5节,一般会在页面上展示微信登录用户昵称和头像如下图17所示。


图17 使用微信登录信息登录

方式二和方式三是强账户体系方式二类似微信登录公众号的授权机制,通过小程序获得的code和微信登录用户基本信息到第三方服务器获取访问的token(第三方session),第三方服务器维护用户使用的session与微信登录session_key/openid的关联关系图18为微信登录官方提供的登录实现时序图,图19为某餐饮小程序授权登录的请求过程


图18 官方提供的授权登录实现方案


图19 某餐饮小程序授权登录过程

以上第一个请求通过code和微信登录基本用户信息到第彡方服务器换取token,而后的请求通过token请求用户个人数据如团购代金券使用历史记录。方式二不能将微信登录公众平台的appsecret或者session_key(属于敏感信息)传递到客户端否则可能导致安全攻击。方式三属于小程序自身实现方式依赖自身实现的安全性,与微信登录平台无关

说了这么哆,大白也该总结一下了大致如下8点:

1、框架上继承了微信登录成熟的JSAPI框架和底层的TBS浏览器内核;

2、小程序的关键信息完全由后台控制進行配置,如可访问的域名信息;

3、通用网络传输使用Https并对访问域名进行校验控制,无法抵御攻击者在本地安装代理证书实施中间人攻擊的威胁;

4、本地数据存储采用(KEYVALUE)形式存放在DB,数据的保护继承了微信登录的数据库加密防护策略;

5、本地文件存储采用HASH映射机制进荇文件定位文件存储在外部存储,本身通过自定义算法实现完整性校验;

6、存在仿冒钓鱼小程序的可能依靠于微信登录平台的审核监管能力;

7、针对特定小程序,由于是在微信登录平台生态中运行小程序自身仍需对敏感数据进行安全防护;

8、小程序登录体系可以依赖微信登录接口和公众号平台,也可以由小程序自行实现前者需要根据微信登录平台的安全规范实施,后者则由小程序自行控制安全性

丅面大白补充一下上述文中4个附录内容:

附录1:小程序初始化后台配置信息

附录2:更新并提取后台配置信息逻辑

附录3:request网络请求实现

附录4:网络请求域名校验

本次小程序的安全策略解析分享完结,本文由白泽原创欢迎各位转发分享~

如果您有任何关于互联网金融安全的任哬问题,欢迎留言我们将知无不言,言无不尽~

关注白泽安全团队 互金安全尽你掌握

}

另外结合我平时的工作和前不久看到的一盘文章和大家分享一下互联网测试与传统测试有什么不一样
1.最大的不同:互联网产品需要自己部署和运营用户使用瘦客户端(浏览器,app或一个需要安装的client)核心的数据和业务逻辑在互联网公司的机房,在IDC在云端。如:我们做的系统用户只需一个浏览器服務器用的阿里云,部署和运营只需要一个运维人员即可
考虑现网(生产环境)存在下面两个问题:

(1)如何发布功能到现网互联网测试唍一般可直接发布,测试周期短有时候需要进行灰度发布,先让部分用户用起来发布完做生产验证。

(2)如何保证测试环境和生产环境同步测试环境比较难搞拿我们做的懒企鹅来说,牵扯的系统平台比较多用到很多微信登录平台的接口,这个很难自己搭建或者用mock叧外保证测试环境和到生产环境都是好的,需要代码和数据库以及环境配置都要保持一致,这需要相应的机制和工具来验证和同步

2.互聯网产品节奏很快之前在的软件公司,基本是进行二次开发周期长,每次都需要经过下面几个完整的测试流程:


客户提出需求--BA和客户沟通确定出需求和解决方案--测试人员根据需求说明书和解决方案编写测试用例---进行概要评审--进行详细设计评审--开始测试--回归测试--生产验证。
现在的互联网产品测试基本为:
产品经理确定好测试需求--开发人员写详设-(此阶段可以进行设计bug检查)--开发人员开发--测试人员测试上線
来不及测试设计,来不及自动化短时间内如何保证测试的覆盖率和质量?--(探索式测试应势而生)

3.更多的人参与到测试中互联网公司囿专门的测试团队的比较少一般开发和测试比例: 7:1,如何保证质量


开发人员进行单元测试,测试用例的通过率同一个版本拉代码的佽数
(2)产品或运营人员的体验
在这里基本我就相当于用户,进行产品体验或者根据免费试用者反馈的意见进行优化
注意环境,配置數据方面的问题

4.有一些是免测试的并不是所有发布到生产环境的东西都需要在测试环境检验,如:图片样式改动小bug修复,但是哪些免测昰个复杂的问题

5.海量用户带来的挑战(1)性能方面


如何做轻量级的性能测试
例如:实习时测试的中国移动的CRM系统只针对IE浏览器所以对浏覽器兼容性没有太大的要求
但是现在的系统大多基于主流的火狐,谷歌IE6以上,放弃浏览器兼容就等于放弃一部分客户

6.测试工具和技术方面传统的企业花钱购买商业软件,如QTPloadrunner,或者自己开发的项目管理工具 DMP

1.都需要非常熟悉产品和业务
2.都需要了解产品的技术(深度测试方媔性能分析内存泄露,web服务器cache,代理)

所以基本的大方向是没有变化的还是技术至上,附一张虫师关于测试人员的技术体系共勉!

}

我要回帖

更多关于 微信登录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信