大家都说开发者无所不能:零代码做测试、一行命令实现马上部署……但是看似无所不能的开发者也会有惴惴不安的时候……
不少开发者担心自己的代码被反编译、核心业务逻辑被破译,算法易被二次打包等,对自身的智力成果没有安全感。
开发者应该怎么办?不用担心!小程序代码加固功能上线!
为了提高微信生态安全性,微信团队推出 小程序代码加固功能,协助开发者保护小程序安全。该项功能具有以下突出优势:
- 防止代码暴露:通过对前端代码加密,实现字符串加密、属性加密、调用转换、代码混淆等保护措施,防止代码暴露
- 一键加固代码:通过安装微信开发者工具插件和 Sourcemap 代码加固调试工具,右键一下即可加固代码,方便快捷
- 支持批量加固:如需要批量加固代码,直接修改 code_obfuscation_config.json 的 configs 字段,省时省力
如此优秀的代码加固功能,3 步即可快速应用!点击 文档 快速应用!
代码加固功能以简便高效的操作方式,保护开发者的智力成果,提高微信生态的安全性,给予开发者满满的安全感。
你对代码加固功能还有什么建议?或者有哪些开发技巧 / 方法能够提升你的开发安全感?欢迎分享给我们!
我们将精选 3 位评论用户并且各送出地球背包 1 个,包你码力全开。
* 获奖名单将在「微信开放社区」本次话题评论区进行公示
感谢大家关注代码加固话题。上周我们看到大家在评论区分享保护代码安全的小技巧和好方法,也感谢大家对代码加固能力的关注。微信团队将继续支持代码安全,为各位开发者的智力成果保驾护航!
我们精选以下 3 位用户的回答并各送出微信地球背包一个。2022 年 9 月 6 日前,我们将通过社区私信联系以下得奖者确定邮寄地址,如一周内未收到回复(即2022 / 09 / 13 0点前),视为放弃奖品。
作为一位小程序开发者,主要用原生小程序+传统后台的开发方式进行开发。项目的安全,一般从两个方面考虑,一方面是前端小程序代码的保护,另一方面是后端接口的安全保护。
(一):关于前端小程序代码的保护(点赞)
采用原生小程序代码开发的方式,相比于类似uniapp的其他多端开发框架来说,原生开发稳健易用,所有的api和组件都不会出现一些莫名其妙的BUG。缺点是对代码的保护不太好,如果上传代码的时候不在小程序开发者工具里边勾选代码保护,小程序的代码就原原本本的上传到微信服务器了。当小程序被反编译之后,代码和注释都非常清晰的展示出来了,非常方便剽窃人员。就算是勾选了代码保护,本人反编译自己的代码,可读性仍然挺高的。uniapp这种多端框架编译成小程序代码之后,多少会对代码进行一下混淆,比如方法名,变量的名称,进行压缩混淆。但如果不是极其复杂的业务逻辑的话,努力读一读混淆后的代码,仍然是可以读懂的。
这次官方代码进行加固之后,我做了一个测试,把代码进行了加固并且上传,选为体验版,拿到体验版的wxapkg代码包之后进行反编译,发现反编译出错,代码包无法被反编译了(也可能是反编译的工具该升级了)。这样看来代码加固是有效的,最起码我的前端代码是不会轻易被反编译拿到可读性较强的源码的。
对于我们开发人员来讲,前端(小程序)代码是运行在微信里边的,代码安全方面,还是要靠微信帮忙解决。只要能解决代码不被轻易的反编译,安全感还是很高的。
(二):关于后端接口的安全保护(方案建议)
对于项目来说,有的项目核心是前端代码,有的是接口数据。对于前端代码保护非常重要,后台接口的保护也一样重要的。市面上有很多的抓包工具,通过抓包工具,很轻而易举的就抓取到小程序内接口的请求和返回参数。不管你登录的时候用的什么token,你每次请求后续接口的时候,都需要带着这个token去请求数据。比如一个资讯列表的数据,拿到接口和请求数据之后,只需要改变请求的页面编号,循环请求这个接口,就能拿到所有的数据信息,很值钱很重要的数据,就这样轻而易举的被其他人拿到了。有的人说可以把请求和返回的数据进行加解密,但对方都对你进行抓包了,自然也能拿到你加解密的key,无非是对抓包的人增加一些额外的工作量,并不能影响数据被泄漏的最终结果。
最近了解到的一个很好的解决方案是利用云开发,经过实际测试,云开发的云函数请求,并不会被抓包工具抓到请求。可以在云数据库里边保存加解密的秘钥key,小程序每次启动的时候,获取当前有效的加解密key(这个加解密的key),把key存到小程序本地,正常该请求数据的接口,拿到返回数据,用key去解密。写一个云函数,定时更新云数据库和传统后端的这个加解密key,保证加解密key是同步和最新的。这样就算接口被抓包,数据依然是无法解密的。
这种利用云开发的方式,我觉得是目前对接口最好的安全加密方式,安全系数直接拉满了。毕竟咱们小程序是在微信环境内运行的,如果小程序mp的后台直接能提供一个这样的加解密key功能(可以设置key和更新同步策略)那安全系数应该是满满的。
试了下在安装完插件后,还需要关闭下当前项目,否则项目右键“进行代码加固”不会出现。很好奇代码加固和代码混淆是不是同一个东西
分享一个使用微信 or 微信支付自带的安全能力可以提升营销安全的小案例
案例:政务消费券发放、商家营销场景
在发券时所使用到微信支付安全能力:
1、在API发券时,拦截恶意用户、小号、机器号码等
2、开启自然人拦截,多个微信号同属一个身份证时,视为同一用户
3、微信用户安全等级识别
众所周知,在做一些营销补贴活动当中总是不可避免会出现一些“羊毛党”,有些“羊毛党”甚至想把你这只“🐑”抬回家。一般在中大大型营销活动发布预告之后,这些黑灰产就会开始研究如何把你“🐑”抬走,使用传统的验证码、IP访问限制或地理位置限制等并不能很好的来防范此类“羊毛党”用户。过多的安全验证步骤会影响用户体验,使用三方风险用户验证会担心数据泄漏、用户识别不够精准、增加活动成本,不加防范就会让商家和平台的营销效果打折,营销费用受损,而本属消费者的福利也被黑产薅走,用户体验受影响。
自从微信用户安全等级识别上线前后,搭配微信支付券的自然人拦截和风险用户拦截,可以很好的解决此类问题。不仅不会增加风控成本,微信识别风险用户也非常精准,对于正常用户拦截基本为0,更不用担心用户信息数据泄漏的问题。
对于自身业务稍加改动两部分就可以很好的拦截“羊毛党”这类风险用户了(riskControl.getUserRiskRank也可以单独使用,也是很棒的能力):
第一部分:使用微信支付提供的代金券能力替换自身系统本身的优惠券能力,制券时,勾选微信支付券自带的安全功能
第二部分:在活动时,先调用微信的riskControl.getUserRiskRank接口来判断用户风险等级,当用户的风控等级满足自己活动条件时再进行优惠的发放,接口地址https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html
最后补一个被羊毛党盯上的活动,截图为微信用户安全识别到的数据
之前我的代码就被别人反编译了,然后自己也去试了下(用的自己的小程序),结果还真的可行,反编译后的代码和我本地代码一模一样。
我们都知道“网络没有隐私”,尤其是作为开发者,我们只能减少对这种隐私的暴露。其实对于我们这种个人开发者而言,知识成果这些都不重要,就是怕被人拿到自己的源码,直接改个名字就变成他自己的了。
小程序代码加固的优点很明显,就是帮助我们保护代码,即使被泄露也不容易被反编译出来。
缺点就是代码加固后带来的一些问题,比如报错,就需要反查(Sourcemap),那可能就需要腾出一定的时间来解决。或者加固后的本地代码包变大(加固增量能否不计入)。
对于微信这么大的平台来说,每一个小程序上线就该有用这种代码保护,现在可以通过配置对某个核心文件或全部的文件进行代码加固,至少现在有了一种新的代码保护方法。希望在未来的不久,我们不需要做什么配置,发布上线的小程序就能被加固保护
提升安全感的方法: “掌握一门新技能,写代码自带混淆”。
已阅,我觉得戴个外套更有安全感,加固就是我们程序的外套
,好喜欢这个背包
满满的安全感,让成果能够有保障,安全保障开发者权益,点赞!
哇!昨天周一,周会上我们还在讨论相关功能呢!今天就看到这个功能了,这也太棒了!马上转发到公司群,哈哈哈
已阅,虽然不懂,但是这个活动不错。
这么好的功能!值得一键三连,点赞、收藏、在看!走起来!大家赶快奔走相告,维护我们的代码安全!