今天看啥  ›  专栏  ›  defaultCoder

小程序被反编译非法获取源码的防范措施

defaultCoder  · 简书  ·  · 2019-05-23 15:27

文章预览

引言

小程序会在首次打开时会从微信 CDN 下载小程序的代码包到本地, 那么代码包下载到手机里, 就容易出现加密后的代码包被反编译而使得小程序源码泄露问题.

为什么微信不采取措施避免这个问题?

如果代码不下载到本地, 那就不会出现这样的问题, 可是每次访问从网络加载小程序, 那小程序的体验将会极差. 那就违背了小程序的初衷了, 肯定是不能这样做的.

只能把代码下载到本地的话, 其实这个问题无法避免, 微信官方也努力过, 提供了"上传时自动压缩混淆", "上传时进行代码保护"等策略, 然而并没法真正避免加密后的代码包被反编译得到源码的问题. 混淆也是有规则可言的, 而且进行混淆后的代码小程序还得解析, 这也是会对性能造成损耗, 过度混淆加密是不可行的.

对我们小程序开发者有什么影响?

其实小程序就是个前端, 我们可以当做html来看待, 被看到了源码其实不这么重要, 最重要的是劳动成果被盗取了心情糟糕.

还有一个我们需要防范的, 也就是本文的重点: 接口暴露, 服务端容易被伪造的请求恶意访问.
如果这个不关心的话, 接口可能被非法调用, 直接那我们做好的应用发布, 山寨一个一模一样的小程序. (虽然可以举报但效果不明显, 严重损害开发者利益)
所以我们需要做一些防范措施.

客户端由于源码都能被拿到了, 所以在客户端做什么构造请求头, 加密等等, 无论做什么都是无力的.
接口是不可能不被访问的, 那么我们可以再服务端, 做请求来源的校验. 如果不是我们的小程序, 就可以拒绝访问, 当然也可以给它发送一些无意义数据, 如果你想的话.

怎么区分?

网络请求的 referer header中不可设置。其格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html ,其中 {appid} 为小程序的appid, {version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本;

这是小程序官方文档描述. 详见:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html

我们通过上述描述可以看到, 使用小程序发请求时header是固定不变且无法修改的, 其中还携带了appid, 我们可以通过该值进行判断这个请求是否来自我们的客户端.

………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览