# 安全指南
本文档整理了小游戏开发和运营过程当中的一些常见的安全事项,用于帮助开发者了解、发现和修复相关安全和漏洞问题,避免对业务的正常运营造成损失。为了便于落地,部分事项已经有相应的能力来支持解决。
# 安全原则
小游戏的开发过程中容易不经意埋下一些安全问题 樱花视频在线,遵循一套良好的安全开发原则,能够规避大部分风险,现整理一些原则如下:。
代码保护原则:妥善保护源码 樱花视频高清,首次上线前需对提审的代码进行加固,提高恶意阅读,分析,对抗的成本。
权限最小原则:代码提审时 樱花视频免费观看,只保留常规玩家权限,剔除一切的特殊权限,如:生产代币/虚拟道具的权限,测试期的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的形式提供, 支持开发者自由添加关键词,定制化游戏的安全策略。
接口调用需符合规范,严禁通过接口实施撞库或进行异常高频请求,例如违规测试等。违规操作将会被限制小游戏的运营能力。
# 文本内容安全
功能描述
文本内容安全能够识别游戏领域常见的违规类型,例如:谩骂、低俗、营销广告、小语种,无意义灌水以及违法违规,帮助构建健康的游戏环境。
- 违法违规内容识别
- 谩骂,隐晦低俗,软色情
- 灰黑产广告引流识别
- 文本变种对抗,拆字叠楼识别
- 文本小语种类型识别
- 灌水无意义文本识别
应用场景
- 用户昵称检测
- 聊天类文本检测
- 游戏素材类文本检测
- 社区类文本检测
- 资料类文本检测
- 其它文本检测场景
开发接入指引
# 图片内容安全 (樱花视频)
功能描述
图片内容安全主要针对游戏领域常见的违规类型,例如:色情,低俗软色情、血腥、恐怖、恶心不适、营销引流广告,辱骂以及违法违规,帮助构建健康的游戏环境。
- 违法违规图片识别
- 色情图片识别
- 低俗软色情图片识别
- 血腥、恐怖、恶心不适图片识别
- 营销引流广告图片识别
- 辱骂图片识别
应用场景
- 用户头像检测
- 公屏聊天图片检测
- 游戏素材类检测
- 资料类图片检测
- 社区类图片检测
- 其它图片检测场景
开发接入指引
# 音频内容安全
功能描述
主要针对游戏领域常见的违规类型(例如:色情、涉政、谩骂等违规内容),从而降低人工审核成本,提高审核效率,帮助构建健康的游戏环境。
应用场景
- 游戏聊天频道的实时语音
- 游戏社区论坛的语音内容
- 其它音频检测场景
开发接入指引
樱花视频网站 - # 常见问题
请不要完全依赖内容安全服务
将小游戏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___