专栏名称: 野蛮人诺基亚
目录
相关文章推荐
51好读  ›  专栏  ›  野蛮人诺基亚

你的小程序代码已被开源,但微信官方并不想背锅

野蛮人诺基亚  · 简书  ·  · 2018-01-05 20:05

正文

01 源代码可任意下载的重大漏洞终于大规模爆发

2018年的第一天,微信小程序被爆出惊天BUG:任何人可以通过AppID和版本号获取任意小程序的源码文件!

该漏洞被大范围曝光起源于V2EX论坛一篇关于使用微信小游戏“跳一跳”不校验post的漏洞进行刷分技术文章,文章同时给出了获取跳一跳小游戏源码的获取方法。文章备注,此种获取源码的方法对于小程序也是通用的。

方法非常简单:只要获取到小程序的appid和版本号,即可通过构造URL直接下载该小程序的源码wxapkg文件。

理论上,小程序的appid和版本号是只有开发者本人知道的,除非小程序开发者公布,其他人员无从获取。而技术层面上,我们却可以通过对小程序和服务器的通信进行抓包获取到小程序appid和版本号。这就使得下载小程序源码变得轻松异常。

微信小程序官方称在当天修复了通过构造URL下载源码的漏洞,目前,已无法使用构造URL的方式直接下载小程序执行包。

这个锅应该由谁来背?

有开发者次日在V2EX爆料称,该漏洞是由于小程序CDN服务商没有给访问做URL鉴权导致的。服务器开发我并不熟悉,此处不站队。

实际上,通过构造URL的方式下载小程序源码只是其中被曝光了的一个方式,我们的手机里其实已经保存了所有我们使用过的小程序执行包,对于root的安卓手机,我们可以在appbrand文件中找到所有已经使用过的小程序wxapkg文件。

只是命名规则比混乱,但这比抓包和构造URL的方法降低了对技术的要求。

之所以在标题使用“ 终于大规模爆发 ”,是因为这两种获取小程序源码的方法早在 2017年6月 就有开发者发文给出了,而那位开发者写文更多的是对前端代码安全的讨论。

02 更有讨论价值的恰恰是前端代码的安全问题

小程序大部分功能的实现都是基于前端的,很多开发者为了省掉域名备案和SSL证书部署的麻烦,将小程序的大部分功能都写在了前端。在被抓包和提取执行包不可避免的情况下,就要求小程序官方采取足够的代码安全保护措施。

而这一点,小程序开发团队做的不是很好。

使用前文的任意方法获取到小程序的执行文件,用Python版脚本(不得不佩服我们的程序员,在短短的一天时间内,出现了Python、PHP和js三个版本的解包脚本)对下载的wxapkg文件解包后得到这么几个文件

解码后的小程序文件目录

可以发现这些文件的组成和小程序的代码已经非常相似了。与常规小程序代码不同的是,解包的文件格式仍然是HTML文件。

但这不是重点。

打开page-frame.html和app-service.js,可以发现这些代码已经非常具备可读性了:

page-frame.html代码截图
app-service.js

对于熟悉小程序开发的人来说,这样的代码已经几乎不需要再格式化了,现有文件已经可以比较清楚地看出代码的逻辑。







请到「今天看啥」查看全文