评论

小程序的防盗思考

如果我是一个盗版者,我这么做的目的当然是为了增加我的收益,毕竟成本小,我会找很多比较热门,流量高的项目,扒下来,加上我的广告(嘿嘿),我不太在乎小程序的质量,只要它能正常运行

之前写了一篇《用webpack编译小程序》的文章,有人留言问到关于小程序防盗,加密,混淆等等问题,我想了一下午,发现这个真的是一个问题(呵呵),这篇文章来分享下我的思考

https://juejin.im/post/5b0e431f51882515497d979f

上文是一篇关于小程序反编译的介绍,作者通过一顿猛如虎的操作,成功的扒下了一个小程序的源码(好像是滴滴)。文末作者提到了一点安全相关的问题,为增加了反编译者的阅读难度可以通过babel来压缩混淆js文件。

我想通过各种框架(wepy, mpvue等)来编写的小程序,框架应该都经过了babel来处理输出,反编译者拿到的应该都是uglifyjs后的文件,之所以仍然有这些问题,应该还是有相当一部分的同学使用的原生小程序语法来进行的开发的吧!

盗版

如果我是一个盗版者,我这么做的目的当然是为了增加我的收益,毕竟成本小,我会找很多比较热门,流量高的项目,扒下来,加上我的广告(嘿嘿),我不太在乎小程序的质量,只要它能正常运行。

镜像盗版

镜像盗版是成本最小的一种方式,扒一个小程序,clone成n个项目,上线,收钱。镜像盗版不理会源代码是否混淆或者加密,不需要弄懂逻辑,仅仅需要小程序能正常运行,即便不完整。

数据盗版

这一类是比较有追求的盗版,因为搭建一套数据服务成本较高,因此扒一个小程序,将api抽离出来,自己开发界面,避开被人投诉,神不知鬼不觉的利用别人的数据服务(想到这,有点激动)。

数据保护

不论那种盗版,最终都需要将数据呈现给用户,因此如何保护数据是防盗的一个关键点。

关键字防盗方案

PC/H5我们有一种经济的操作方法,将关键字秘钥(如公钥,keyword)非周期性通过后端php/node/java等服务渲染输出(明文),浏览器端则通过算法生成token来解开相关数据或接口。注意非周期性这个描述(周期性输出也可以,但破解成本变小了)。

小程序并不能如上操作,但小程序可以通过非周期性更新版本,来输出不同的关键字秘钥(如写死在app.globalData中),这必然增加了盗版者的破解成本,当正版更新秘钥后,盗版小程序不更新将不能正常获得数据,也就断了盗版的根

云函数方案

这个是我重点想介绍的。云端小程序面向的是没钱,没资源又想搞点啥挣点外快的开发者,正规小程序当然都必须有自己的后端数据服务,但并不妨碍使用云端服务来提供支持。

云端很安全,这是我的推论,我也深信这是正确的。之所以安全,我想应该是微信app一定封装了一些和腾讯云间通信的某种不可告人的秘密吧。试想一下,如果不同小程序之间的云服务被串了,我的小程序用你的云资源,这。。这。。这,估计腾讯自己都会玩不下去了。

基于云端很安全的前提,我们可以把关键的秘钥数据存放在云端,每一次小程序初始化时去云端将关键秘钥取下来生成接口访问token,这样即便盗版者扒到了小程序,但云服务的隔离性使得盗版者不能获取关键秘钥,从而盗版者成功的扒到了一套UI

云服务的缺点是每天有访问次数上限,我记得是50万次/天,这完全不够啊~~ , 嗯,老铁,666,双击点赞

结束

以上种种,本人并没有实践过,仅限于分享,我们现在主要做开源,盗版,不存在的啊~~~

如果你想了解下我们的架构,可以看这里 https://github.com/webkixi/aotoo-hub
如果你想使用我们的架构, 不怕死的看这里 https://www.agzgz.com
如果你还想看看我们的小程序,骚一骚下面这个

点赞 5
收藏
评论

5 个评论

  • 陈式坚
    陈式坚
    2019-06-06

    不错 你这种发广告还至少有点原创 支持一下

    防盗基本是不可能,防刷还是可以讨论的


    还有,你们那个UI真的挺丑的... 要不叫组件库吧

    2019-06-06
    赞同 1
    回复 1
    • 天天修改
      天天修改
      2019-06-06

      哈哈,我也觉得挺丑的

      2019-06-06
      回复
  • 
    
    2019-06-06

    天天AD


    2019-06-06
    赞同 1
    回复
  • elontian
    elontian
    2021-08-15

    安全方面推荐试试云托管,利用微信私有链路的能力,实时保障通信安全,后台访问接口甚至都无需暴露到公网。对小程序业务来说还是保持发送http请求不变,微信底层会自动将http请求转译成微信的私有协议,所有的通信数据都会进行实时加密,通过安全的链路传递给后端服务中,后端服务器中收到的也是http报文,也无需做什么改动。防止通信数据被爬被窃取、防DDoS攻击、防DNS劫持。

    云托管:https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/basic/intro


    2021-08-15
    赞同
    回复
  • 起
    2020-03-21

    好文

    2020-03-21
    赞同
    回复
  • Eden
    Eden
    2019-06-11

    wepy编译后可读性也比较强。mpvue做比较复杂的交互很麻烦,style无法用对象只能一个一个写,自定义组件slot也只支持一个。我现在是上线原生的还是框架重写弄得很烦。

    2019-06-11
    赞同
    回复 1
    • 天天修改
      天天修改
      2019-06-11

      嗯,好像wepy使用gulp编译的,这样源码是有较好的可读性(ugliy化除外),但真正做好接口安全的话,即便被扒了问题也不大。

      我们项目用webpack去跑也是看到第三方框架可能会有一些不好处理的地方,而且之前的项目经验让我对于gulp型编译是有所顾虑的,不是说gulp不好,gulp要做好热更新比较麻烦,一般的热更新都是全遍历更新,导致项目一旦膨胀,开发就是等灯等灯。

      小程序本生的mvvm的框架结构我认为是比较成熟的,缺陷用webpack来补一补,哈哈,还蛮好


      2019-06-11
      回复
登录 后发表内容