# 安全指南

本文档整理了小游戏开发和运营过程当中的一些常见的安全事项,用于帮助开发者了解、发现和修复相关安全和漏洞问题,避免对业务的正常运营造成损失。为了便于落地,部分事项已经有相应的能力来支持解决。

# 安全原则

小游戏的开发过程中容易不经意埋下一些安全问题 樱花视频在线,遵循一套良好的安全开发原则,能够规避大部分风险,现整理一些原则如下:。

代码保护原则:妥善保护源码 樱花视频高清,首次上线前需对提审的代码进行加固,提高恶意阅读,分析,对抗的成本。

权限最小原则:代码提审时 樱花视频免费观看,只保留常规玩家权限,剔除一切的特殊权限,如:生产代币/虚拟道具的权限,测试期的Mock代码,特殊接口等,防止上线后被恶意利用。

票据鉴权原则:自定义登录态后需要隐藏好票据,票据的设计尽量结合身份信息,时效信息,包数据信息,权限信息等 樱花视频网站,规避各类越权风险。

互不信任原则:前后端的数据交互中每一次都需鉴权,后端不能信任前端提交的数据,重要数据需要结合游戏的特点,上下文 樱花视频,合理性等做出合法性判定,拒绝预期之外的请求。

活动风控原则:活动运营中,现金和高价值道具发放需要设置足够合理的门槛,例如:时间价值,等级价值,账号价值等,避免被非目标玩家恶意刷走 樱花视频在线

UGC不可信原则:用户产生的UGC内容(图片,文本,音视频等)均不可信任,在采信和应用之前,务必过内容安全审查,检测正常的内容才可对外展示 樱花视频高清

# 代码加固2.0

代码加固是对明文游戏代码的一种保护 樱花视频免费观看,包含了代码混淆,代码水印,代码锁以及部分对抗外挂的能力,能够较全面的保护代码和游戏运营,为了便于应用,相关能力统一打包在了开发者工具插件——《游戏深度保护》里面,能力项以及加固的等级,根据游戏自身的情况可以自由选择生效。

# 代码混淆 (樱花视频高清)

混淆是代码特征工程的基础上,对代码进行功能等价,结构异型,名称重组的一种转换,转化后的代码不会改变原有的游戏逻辑 樱花视频网站,但名称上,结构上,控制流程上会发生巨大的变化,几乎丧失了可读性,可大幅的提升攻击者的理解成本,根据转化复杂程度的不同,插件里提供了初级,中级,高级三类选项,开发者可以在体积膨胀开销和结果代码复杂程度之间,自行衡量选择。

以下是几行简单的示例代码,在选择不同的混淆等级后 樱花视频,转化出来的结果代码。

示例代码:

___JX5_PROTECTED_code_2___

“初级”选项的混淆结果:

___JX5_PROTECTED_code_3___

“中级”选项的混淆结果:

___JX5_PROTECTED_code_4___

“高级”选项的混淆结果:

___JX5_PROTECTED_code_5___

# 代码水印

代码水印是在代码加固过程中添加的一段身份指纹信息,对代码运行逻辑不产生任何影响,无额外的性能开销,同时还具有隐蔽性和唯一性。水印信息在一定程度上证明了代码和开发者的权益关系,在判定代码归属关系时候,可以作为证据向平台寻求支持。

# 动态保护

加固后的代码,攻击者会进行分析和逆向混淆等,视图理解和复原代码逻辑。因此,本方案也支持了运行时加固,杜绝静态分析的可行性,并从多方面提升动态调试、注入的成本,进一步夯实加固代码的安全性。

# 体积与性能开销

性能和体积在小游戏场景里是非常重要的,相关的开销上给予了针对性优化考虑。在既有数据样本里统计到,运行性能上额外损耗非常低(几乎可忽略)。代码体积膨胀上,"高级"加固 平均<= 30%,“中级”加固 平均<=10%,低级”加固 平均<=5%。

注意:提倡源码直接加固,尽量不要引入第三方混淆工具参与二次加固,带来不必要的开销和安全隐患。

# 如何使用

下载并安装 1.06.2401020 或以上版本的开发者工具、安装 "游戏深度保护" 插件即可使用。详细说明见:游戏深度保护插件

# 游戏内容安全 (樱花视频)

游戏内容安全是一套更适合小游戏场景的UGC安全解决方案,相关标准更贴合游戏行业,覆盖主流的游戏违规检测项,同时结合一定的反恶意帐号能力。相关能力以服务端API的形式提供, 支持开发者自由添加关键词,定制化游戏的安全策略。

接口调用需符合规范,严禁通过接口实施撞库或进行异常高频请求,例如违规测试等。违规操作将会被限制小游戏的运营能力。

# 文本内容安全

功能描述

文本内容安全能够识别游戏领域常见的违规类型,例如:谩骂、低俗、营销广告、小语种,无意义灌水以及违法违规,帮助构建健康的游戏环境。

  • 违法违规内容识别
  • 谩骂,隐晦低俗,软色情
  • 灰黑产广告引流识别
  • 文本变种对抗,拆字叠楼识别
  • 文本小语种类型识别
  • 灌水无意义文本识别

应用场景

  • 用户昵称检测
  • 聊天类文本检测
  • 游戏素材类文本检测
  • 社区类文本检测
  • 资料类文本检测
  • 其它文本检测场景

开发接入指引

调用API

# 图片内容安全 (樱花视频)

功能描述

图片内容安全主要针对游戏领域常见的违规类型,例如:色情,低俗软色情、血腥、恐怖、恶心不适、营销引流广告,辱骂以及违法违规,帮助构建健康的游戏环境。

  • 违法违规图片识别
  • 色情图片识别
  • 低俗软色情图片识别
  • 血腥、恐怖、恶心不适图片识别
  • 营销引流广告图片识别
  • 辱骂图片识别

应用场景

  • 用户头像检测
  • 公屏聊天图片检测
  • 游戏素材类检测
  • 资料类图片检测
  • 社区类图片检测
  • 其它图片检测场景

开发接入指引

樱花视频 - 同步接口

异步接口

# 音频内容安全

功能描述

主要针对游戏领域常见的违规类型(例如:色情、涉政、谩骂等违规内容),从而降低人工审核成本,提高审核效率,帮助构建健康的游戏环境。

应用场景

  • 游戏聊天频道的实时语音
  • 游戏社区论坛的语音内容
  • 其它音频检测场景

开发接入指引

调用API

樱花视频网站 - # 常见问题

请不要完全依赖内容安全服务

将小游戏UGC内容接入内容安全服务,可以有效缓解人工审核、降低违规风险,但接入内容安全服务并不意味着一劳永逸解决所有问题,为了进一步确保内容安全,仍建议开发者关键环节上设置人工审核确认,以弥补机器识别存在的不足。建议:API判断为review的内容,说明可能存在风险,需要人工确认;API判断为pass的内容,可能包含被漏掉的违规内容,可以按照一定比例抽查。

如果对内容安全解决方案有使用疑问或者需求,应该如何反馈?

有疑问和需求可以点击咨询小助手

# 游戏反外挂

游戏反外挂是游戏安全的重要组成部分,尤其是当游戏具备一定的用户和营收规模之后,如果外挂问题不及时处理,会影响游戏公平性,造成核心玩家流失,营收减少。因此,我们提供了基础的,通用的反外挂能力,帮助开发者抵御外挂攻击,保障游戏的健康可持续运营。

如遇站外侵权情况,可向平台反馈线索:侵权线索反馈

# 协议挂对抗

协议挂是一种比较常见的外挂,其工作原理是伪造数据包,向后台服务发起网络通信。协议挂攻击的是开发者的后台服务,我们整理了小游戏中常见的后台安全风险,用于帮助开发者在开发环节中发现和修复相关漏洞,避免上线后被黑灰产利用。针对协议挂,平台提供了加密网络通道和微信网关,可大幅提升网络协议破解的成本,推荐开发者接入

# 后台安全风险

# 接口鉴权

接口鉴权是指后台接口(包括自建后台接口与云函数)在被调用时需要对本次接口调用进行权限校验,否则容易发生越权行为。

  • 平行越权:即每个接口应该区分不同用户,每个用户只能操作自己的数据。例如:用户 A1 把请求改为 opt_userinfo.php?id=A2 便可以操作/获取到 A2 用户的信息,信息泄露或破坏。
  • 垂直越权:即每个接口区分当前用户的权限,每个用户只能操作自己有权的数据。例如:用户 A1 不是管理员,但他请求 opt_alluserinfo.php 来操作/获取了所有用户信息,造成泄露或破坏。

建议:

  • 敏感数据、能力相关接口需要在后台进行鉴权。通常可校验 openid、 IP 地址、自定义登录态等信息。
  • 鉴权逻辑应放在后台进行,不应在小游戏前端以隐藏页面、隐藏按钮等方式来代替。
# 信息泄露

敏感信息是指一旦泄露可能会对开发者的业务、合作伙伴和用户带来利益损害的数据,包括但不限于账号 Appsecret、特权账号信息、后台加密密钥、登录账户密码、用户身份证号、手机号、银行卡号等。

建议:

  • 敏感信息不应以明文、注释、可逆的编码方式(如 base64)、不安全散列函数(如 MD5、 SHA1)等形式出现在小游戏文件内。
  • 如果小游戏存在敏感信息泄露的问题,微信开放平台将有可能下架该小游戏,并暂停该小游戏的相关服务。
  • 部分敏感信息如用户的银行卡号、手机号等需要用于展示的,需要进行脱敏处理。常用脱敏规范如下:
敏感信息类型展示样例
姓名名字只有两个字,对第一个字打码,如:三。 多于两个字,只保留第一个和最后一个,其余都打码,如:王四、欧**五
身份证只显示第一位和最后一位,如:3****************1
手机号除去手机国际码后,手机号位数不少于10位时,只显示前三位和最后两位,如:156******77。手机号位数少于10位时,只显示前两位和后两位,如:12*****89。国家码可以完全显示。
银行卡只显示最后4位,如:************1234
# 接口条件竞争

接口条件竞争是指同时多次请求同一个接口,导致这个接口同时响应时有某些条件上的竞争的 bug。比较常见的例子是攻击者通过并发 https 请求而达到多次获奖、多次收获、多次获赠等非正常逻辑所能触发的效果。示例代码:

___JX5_PROTECTED_code_6___

开发者的设计本意是只允许用户获得一次奖励。但是当同一个用户的 n 个请求多次到达时,多个线程分别处理,SelectRemainTimes 查出来次数都是 1,这个用户就可以最多获得 n 次奖励。

建议:对关键(完整)逻辑加锁操作或把关键逻辑以队列任务的形式去进行处理。

# 加密网络通道

# HTTPS加密网络通道

为了避免小游戏端上与后台通信的网络请求被分析、篡改,开发者可以使用平台的"小程序加密网络通道"能力,提升安全性。

从基础库 2.17.3 开始支持

# 功能介绍

为了避免小游戏与开发者后台通信时数据被截取和篡改,微信侧维护了一个用户维度的可靠key,用于小游戏和后台通信时进行加密和签名。

开发者可以分别通过小游戏前端和微信后台提供的接口,获取用户的加密 key。

# 使用说明

在小游戏中开发者可以使用UserCryptoManager.getLatestUserKey获取获取用户最新的加密密钥信息。

前端调用示例

___JX5_PROTECTED_code_8___

someAESEncryptMethod 和 someAESDEcryptMethod 分别为加解密函数,由开发者自行引入加解密库来实现,基础库暂时不提供加解密能力。 开发者可参考开源加密库: https://github.com/ricmoo/aes-jshttps://github.com/flash1293/aes-wasm

在开发者服务端,可以调用getUserEncryptKey后台接口获取用户最近三次的key。在获取key的同时,接口会携带version信息,开发者可以比较version版本来选择使用对应的key对数据进行加解密。

服务端调用示例

___JX5_PROTECTED_code_9___
# Donut网关方案

为了避免小游戏端上与后台通信的网络请求被拦截、分析、篡改,开发者可以使用Donut服务,端上的网络请求将直接接入微信私有链路,经过网关,转发到开发者后台,避免上述安全问题。微信安全网关

# 内存挂对抗

内存挂是的原理一般分三步走:搜索目标数值->定位内存空间->篡改内存数值。应对方案上,开发者不能信任单一数值,核心数据在内存里需要创建“校验对象”,采信数据前做双重/多重校验,校验不通过的话,则认为数值被外挂攻击了,可以进行下一步动作,例如:游戏中断、游戏产出作废、封禁帐号等。开发者可接入小游戏内存风险检测与辅助加固工具,选择需要保护的关键内存数值,加固之后的内存可隔断外挂搜索、设置内存陷阱,会触发自定义的反制手段,有效保护内存数值。也可参考下面的两种保护方式自行实现。

# 内存数值校验

游戏在运行过程中的关键内存数值,需要进行校验,如果校验不通过,则可认为被外挂攻击了,再进行下一步动作。下面是一个内存数值校验的示例:

___JX5_PROTECTED_code_10___

# 内存数值隐藏

在不做特殊处理的情况下,小游戏运行时关键的数值都是以明文的方式存储在内存中的,为内存篡改挂提供了便利,这里建议隐藏游戏内的核心数值。下面是一种有效的实践,使用JS的Proxy特性。

___JX5_PROTECTED_code_11___

# 重打包外挂对抗

重打包外挂的原理是利用APK重打包技术,注入恶意的JS代码,篡改游戏逻辑,这类外挂破坏性强,可以实现出任意逻辑的外挂效果,例如:无敌锁血,一刀秒杀,无限道具等。

# 代码防注入

针对重打包外挂,平台提供了代码防注入能力。接入此能力后,游戏运行过程中,会自动校验指定关键代码的完整性,实时检查是否被恶意注入。它是性能无损的,一旦检测到注入,就执行由开发者预先定义好的拦截动作,比如数据上报、限制特定功能、强制退出游戏等。

如下图是代码防注入的工作原理,开发者也可以参考示例代码自行实现。

___JX5_PROTECTED_code_12___
点击咨询小助手