本文以微信小程序为例,从实战入手,讲解有关于小程序这种新型攻击面的渗透,对于了解小程序的安全性和防范措施有一定的帮助。
什么是小程序?
作为中国特有的一种程序形态,小程序在我们的日常生活中已经无处不在。腾讯、百度、阿里巴巴、字节跳动、京东等各家互联网大厂都有各自的生态平台,当然,也有快应用这种行业联盟型的生态平台。
相较于传统的APP开发,小程序的区别有(以微信举例)
微信小程序 App
下载安装 通过微信(扫描二维码、搜索、分享)即可获得 从应用商店(App Store、应用汇等)下载安装
内存占用 无需安装,和微信共用内存使用,占用内存空间忽略不计 安装于手机内存,一直占用内存空间,太多的 App 可能会导致内存不足
手机适配 一次开发,多终端适配 需适配各种主流手机,开发成本大
产品发布 提交到微信公众平台审核,云推送 向十几个应用商店提交审核,且各应用商店所需资料不一样,非常繁琐
功能区别 限于微信平台提供的功能 对硬件资源的利用更加淋漓尽致,可以做出功能、设计、效果和流畅程度远远超过小程序的软件和服务
传输要求 必须使用 HTTPS,且绑定域名需要备案,不能直接使用 IP 作为地址 依照开发商自主要求,HTTPS 传输可选可不选
开发背景 适合初创团队,试错成本低,需要较少时间和资金投入 适合成熟的商业大公司,对自我品牌要求较高的企业
微信小程序架构分析
整个小程序框架系统分为两部分:逻辑层(App Service)和 视图层(View)。小程序提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。
逻辑层 App Service
小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发 JavaScript 代码的运行环境以及微信小程序的特有功能。
逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之为 App Service。
在 JavaScript 的基础上,微信增加了一些功能,以方便小程序的开发:
增加 App 和 Page 方法,进行程序注册和页面注册。
增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。
提供模块化能力,每个页面有独立的作用域。
注意:小程序框架的逻辑层并非运行在浏览器中,因此 JavaScript 在 web 中一些能力都无法使用,如 window,document 等。
视图层 View
框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示。
将逻辑层的数据反映成视图,同时将视图层的事件发送给逻辑层。
WXML(WeiXin Markup language) 用于描述页面的结构。
WXS(WeiXin Script) 是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
WXSS(WeiXin Style Sheet) 用于描述页面的样式。
组件(Component)是视图的基本组成单元。
目录结构
小程序包含一个描述整体程序的 app 和多