【叨逼叨】小程序这位小姐姐C位出道(为紫宁打Call)已经一年多了,还未从攻城狮这个角度接触过的童鞋可以从这篇文章入手,初识小程序开发。本文将依次从实战层的开发简介、码农IDE、原生插件库入手,深入阐述小程序框架、通信安全、本地数据安全、进程管理等内容。
一、开发简介
简单粗暴的摘取微信公众平台的游戏规则
开发简介如下,发现好多人分不清微信开放平台和微信公众平台,两者完全不同,连平台登录账号都未打通。
二、码农IDE
IDE下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html?t=2018614
需要登录IDE才能使用微信开发者工具,此工具支持微信小程序和公众号开发
APPID从何而来?在微信公众平台注册小程序后,就可在设中查看APPID
三、原生插件库
小程序API清单中提供了用户常用的网络、位置、媒体、文件、数据缓存、支付、日志监控、数据分析等原生插件,未提及的插件可能需要商务合作才能实现,不过微信暂时不支持定制开发的可能性也是有的(了解这方面信息的同学可留言)。
或者换个角度,这种定制化的插件复杂度会不会提升,会不会因此牺牲掉一部分的体验和性能来换取功能的使用,是否违背了小程序触手可及,流畅秒开的初心
四、小程序框架
以下内容参考博客:https://blog.csdn.net/baize_security/article/details/54582854 致敬
一个小程序项目的三层框架如下,跟MVC含义类似
小程序内部不同层级模块之间的调用关系如下
这里注意,图中的TBS (Tencent Browsing Service) ,是由腾讯X5浏览服务升级而来的浏览器内核,作为业界首个升级至X5 blink内核,与Android 5.0 版本的Chromium M37一致,解决了Android 多平台兼容性问题
五、通信安全
小程序的通用request网络请求仅支持采用https,处理请求的接口位于com.tencent.mm.plugin.appbrand.g.c中,包含url校验、域名校验、发起请求和处理响应结果。
接口中的报文信息是明文传输,Https校验采用类似浏览器的策略,是具有安全性的SSL加密传输协议,通过系统原生的URL.openConnection()方式请求,证书校验的策略为校验公钥证书的根证书是否在合法CA列表凭证中。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
但是,微信官网也说了,虽然小程序是生长在微信生态环境中的安全平台,小程序自身仍需对敏感数据进行安全防护,保护措施(自认为)可以仿照公众号消息推送机制:AES等对称加密 + 签名验证的方式实现。可查找下图资料详细阅读
六、本地数据安全
本地数据一般分为两部分:本地SD卡文件、APP安装目录下的文件
1. 本地SD卡文件保存在SD卡/sdcard/tencent/MicroMsg/wxafiles/wx_id/目录下
存放SD卡的文件有做完整性校验,无法被篡改。首先,最终存储的文件名是:对称加密(文件流内容Alder32校验和|原始文件名)生成的,最终文件名和文件内容会通过自校验判断完整性;其次,本地缓存是通过HASH映射查找文件。所以即使能**文件名和文件内容,绕过文件自身签名校验,篡改为攻击者的伪造文件,小程序APP也无法映射到该伪造文件进行使用
2. APP安装目录下的文件中大多是以数据库形式存储,小程序将需要存储的key/value数据直接存储到Storage DB缓存,进行数据保护需要自行做加密处理,但微信APP会对DB数据整体做本地加密保护,所以小程序本地存储数据的安全性依赖于微信数据库加密方案的安全,策略与EnMicroMsg.db类似如下图
EnMicroMsg.db是微信聊天记录的本地数据库,数据库的加密原理应该也是采用了对称加密方式,至于秘钥是什么,从度娘上众多**微信聊天记录的方式来看,提及最多的是IMEI和UNI组合再MD5截取固定几位得来的。未亲自验证不知道是否属实
七、进程管理
本文参考的博客中说:“微信APP支持最多同时有五个小程序在加载运行状态,每个小程序使用独立进程运行,如果当前开启的小程序已位于缓存进程中,则无需重新加载直接开启(速度快),否则重新加载并替换(如果已有五个缓存进程存在)存在时间最久的缓存进程,若当前未满五个缓存进程,则从未用进程中随机取得一个使用。下图展示微信APP同时已开启过五个小程序的对应进程”
但经过亲测试验,苹果版微信打开小程序后,双击Home键看到后台和微信共用一个任务,安卓版微信打开不同的小程序后台会出现和微信不同的、小程序自己的任务(且支持最多同时打开5个小程序,当打开第6个时,最久远使用的小程序会自动退出),但是从手机设置中进入任务管理器查看进程数时,并没有看到除微信以外的疑似小程序的进程存活。
所以本喵猜测,无论是苹果还是安卓,小程序和微信APP都是共用同一个进程,至于安卓版小程序出现的多任务情况,可能是因为安卓系统在打开小程序的Webview是指定了和主APP不同的任务栈(即taskaffinity属性),苹果没有任务栈的概念所以产生了差异?
以上是近期对小程序的了解,内容比较初级,有哪位了解文中加粗标红这方面信息的欢迎交流~