抖音开放平台Logo
开发者文档
控制台
  • 体验抖音小游戏
  • 游戏引擎
  • 基础功能
  • 开放能力
  • 性能优化
  • 安全指引
  • 安全指引
    收藏
    我的收藏

    本文梳理了小游戏开发和运营过程中需要关注的一些安全风险,并提供相应的建议和工具,帮助开发者规避或修复游戏内的安全问题,避免对业务造成损失。

    安全建议

      1.代码保护:妥善保护好代码,包括源码和各个平台的产物,尤其是 H5 产物更容易被黑产解析或盗用;平台提供的 Secret 或者游戏生产的票据或者加密信息应妥善保管,避免明文存储在代码内;
      2.调试关闭:游戏上线前关闭所有开发期间的调试能力,避免内部泄露或者非正常途径唤起调试功能;
      3.权限校验:敏感接口应校验用户登录状态和权限,只保留需求范围内的最小权限,并下线所有 mock 或者调试接口;
      4.代码加固:核心代码接入游戏深度保护能力,通过混淆增加意外泄露代码后被解析和二次使用的成本,水印用于判断代码来源;
      5.风控校验:对于核心的接口进行风控校验,可以从调用频率,金额大小,用户信息等维度进行校验,避免黑产接口伪造盗刷;
      6.内容安全检测:所有开发者输入或上传的信息需要经过内容安全检测,可以使用平台提供的能力(文本安全检测图片安全检测)进行校验;

    代码加固

    代码加固是对明文游戏代码的一种保护,目前支持了代码混淆代码水印能力,混淆能力能够提高游戏代码被解析和修改的成本;水印能力可以在代码编译时加入游戏的标识,可用于判断是否存在代码盗用和解析被盗代码的来源。
    目前该能力已集成到小游戏开发者工具 v4.3.5 版本和 CLI 工具上,只需一个新增一个配置文件即可完成接入,具体见接入方式
    额外说明:
      不管加固与否,抖音小游戏包体本身也会做加密处理,加固针对的是极端情况下代码泄露后增加黑产盗用的成本,以及用水印判断盗用代码来源;
      加固是 JS 单文件维度进行的,建议只对游戏的核心代码进行加固处理,其他诸如引擎产物,第三方工具包,polyfill 等都无需加固;
      不推荐加固前后使用其他压缩或者混淆工具进行二次处理,避免带来不必要的性能开销和安全隐患
      加固默认只在上传时包体时触发,加固行为只在远端进行,不会改变本地代码;

    代码混淆

    混淆是在小游戏原有编译压缩的基础上,使用改进的多步字面量加密混淆,在不影响原有代码逻辑的基础上,对游戏代码内的名称,结构进行大幅度的改造,使其几乎失去可读性,大幅增加黑产解析或者二次利用的成本。
    目前代码混淆提供了 1,2,3 三个不同级别的混淆等级可以选择,混淆后的代码体积会随着混淆等级提升而增加,建议接入后确认游戏功能测试与性能表现符合预期再上线。

    代码水印

    代码水印是在代码加固过程中添加的一段身份指纹信息,对代码运行逻辑不产生任何影响,无额外的性能开销,同时还具备良好的抗混淆性与隐蔽性:
      黑产使用代码混淆等技术也很难破坏水印
      水印代码与程序语义融合,去除后程序无法正常运行
    水印信息在一定程度上证明了代码和开发者的权益关系,在判定代码归属关系时候,可以作为证据向平台寻求支持。

    性能和体积开销

    不同代码组织方式,不同的混淆等级对性能和体积的影响不同,这里给出平台测试的参考数据,具体表现以实际为准。
    运行性能上额外损耗非常低(几乎可忽略)。
    包体积增长幅度:
    加固等级
    体积增长幅度
    等级 1
    2%
    等级 2
    5%
    等级 3
    10%