安全指引
收藏我的收藏
本文梳理了小游戏开发和运营过程中需要关注的一些安全风险,并提供相应的建议和工具,帮助开发者规避或修复游戏内的安全问题,避免对业务造成损失。
安全建议
- 1.代码保护:妥善保护好代码,包括源码和各个平台的产物,尤其是 H5 产物更容易被黑产解析或盗用;平台提供的 Secret 或者游戏生产的票据或者加密信息应妥善保管,避免明文存储在代码内;
- 2.调试关闭:游戏上线前关闭所有开发期间的调试能力,避免内部泄露或者非正常途径唤起调试功能;
- 3.权限校验:敏感接口应校验用户登录状态和权限,只保留需求范围内的最小权限,并下线所有 mock 或者调试接口;
- 4.代码加固:核心代码接入游戏深度保护能力,通过混淆增加意外泄露代码后被解析和二次使用的成本,水印用于判断代码来源;
- 5.风控校验:对于核心的接口进行风控校验,可以从调用频率,金额大小,用户信息等维度进行校验,避免黑产接口伪造盗刷;
代码加固
代码加固是对明文游戏代码的一种保护,目前支持了代码混淆、代码水印能力,混淆能力能够提高游戏代码被解析和修改的成本;水印能力可以在代码编译时加入游戏的标识,可用于判断是否存在代码盗用和解析被盗代码的来源。
额外说明:
- •不管加固与否,抖音小游戏包体本身也会做加密处理,加固针对的是极端情况下代码泄露后增加黑产盗用的成本,以及用水印判断盗用代码来源;
- •加固是 JS 单文件维度进行的,建议只对游戏的核心代码进行加固处理,其他诸如引擎产物,第三方工具包,polyfill 等都无需加固;
- •不推荐加固前后使用其他压缩或者混淆工具进行二次处理,避免带来不必要的性能开销和安全隐患
- •加固默认只在上传时包体时触发,加固行为只在远端进行,不会改变本地代码;
代码混淆
混淆是在小游戏原有编译压缩的基础上,使用改进的多步字面量加密混淆,在不影响原有代码逻辑的基础上,对游戏代码内的名称,结构进行大幅度的改造,使其几乎失去可读性,大幅增加黑产解析或者二次利用的成本。
目前代码混淆提供了 1,2,3 三个不同级别的混淆等级可以选择,混淆后的代码体积会随着混淆等级提升而增加,建议接入后确认游戏功能测试与性能表现符合预期再上线。
代码水印
代码水印是在代码加固过程中添加的一段身份指纹信息,对代码运行逻辑不产生任何影响,无额外的性能开销,同时还具备良好的抗混淆性与隐蔽性:
- •黑产使用代码混淆等技术也很难破坏水印
- •水印代码与程序语义融合,去除后程序无法正常运行
水印信息在一定程度上证明了代码和开发者的权益关系,在判定代码归属关系时候,可以作为证据向平台寻求支持。
性能和体积开销
不同代码组织方式,不同的混淆等级对性能和体积的影响不同,这里给出平台测试的参考数据,具体表现以实际为准。
运行性能上额外损耗非常低(几乎可忽略)。
包体积增长幅度:
加固等级 | 体积增长幅度 |
等级 1 | 2% |
等级 2 | 5% |
等级 3 | 10% |