Skip to content

18 安全、风控与合规 ​

安全、风控与合规在很多团队里经常被放进同一个部门、同一组流程,甚至同一个文档模板里。但从工程上看,这三类问题并不相同。安全更关注系统是否容易被攻击、篡改或泄露;风控更关注业务是否正在被作弊、套利、洗号、滥用;合规则关注产品、内容、数据处理和发行流程是否满足法律与平台规则。

把三者混在一起的代价很高。因为它会让团队误以为"上一个安全产品""补一份合规清单"就能解决问题,实际上真正困难的地方恰恰在于:这些能力需要和具体业务链路绑定,需要能落到支付、资产、聊天、社交、版本发布、后台操作和外部接入的日常流程里。

对于游戏项目来说,安全从来不是"上线前检查一下"的工作。只要产品开始有真实用户、真实资产和真实外部流量,攻击与滥用就已经出现了。

本章的论述框架与知识库"安全、风控与合规"一章同源:那一章集中讨论三类问题的判断与误区,本章在相同框架上补足工程落地,给出反作弊、数据安全与合规检查的具体实现。

阅读这一章时,最好带着三条主线:

  • 看状态边界:哪些数据、资产和权限最敏感,谁能读、谁能改、谁来审计
  • 看对抗成本:攻击和作弊是否比防守便宜,如果是,系统会在哪里持续失血
  • 看治理闭环:发现问题之后,能不能处置、追责、补救和复盘

1. 安全与反作弊 ​

游戏领域的安全问题,和传统 Web 系统既相似又不同。相似的是,它同样要面对账户盗取、接口滥用、权限越权、数据泄露和供应链风险;不同的是,游戏天然存在一个更强的对抗面,因为客户端在玩家手里,且很多收益可以直接转化成排名、虚拟资产甚至现实利润。

1.1 为什么游戏安全离不开反作弊 ​

很多互联网产品即使没有完美的客户端信任,也仍然能靠服务端权限和交易约束把损害压低。游戏不一样。只要存在下列任一情况,作弊就会直接破坏产品核心价值:

  • 对战公平会影响胜负、段位和留存
  • 资源产出会影响经济循环和付费转化
  • 排行、社交和公会荣誉会影响舆论和生态
  • 高价值账号和虚拟道具能被直接变现

这意味着"安全"和"反作弊"不能分家。安全不是一套通用防护壳,反作弊也不是上线后补个检测脚本。二者都需要围绕业务主链路来设计。

1.2 客户端永远不可信,但也不能完全放弃客户端 ​

一个成熟团队通常都会接受这个前提:客户端可以被篡改、调试、注入、抓包、回放、加速、模拟和批量控制。因此关键判定需要尽可能放在服务端。但这不代表客户端防护没有价值。

客户端防护仍然有两个作用:

  • 提高攻击门槛,让低成本脚本和批量工作室难以规模化
  • 为服务端风控提供更多环境信号,例如调试状态、设备特征、完整性校验结果

真正的问题不在于"要不要做客户端防护",而在于不要把最终安全性寄托在客户端防护上。只依赖壳、加密和反调试,通常只能挡住最表层的攻击。

text
安全防护分层模型
┌────────────────────────────────────────────────┐
│                   服务端权威判定                 │
│         ┌──────────────────────────────┐       │
│         │  战斗结算 · 资产变动 · 排行   │       │
│         │  支付状态 · 匹配资格 · 交易   │       │
│         └──────────────────────────────┘       │
├────────────────────────────────────────────────┤
│                   业务规则校验                   │
│         ┌──────────────────────────────┐       │
│         │  经济异常 · 行为模式 · 关联分析│       │
│         └──────────────────────────────┘       │
├────────────────────────────────────────────────┤
│                   客户端防护层                   │
│         ┌──────────────────────────────┐       │
│         │  完整性校验 · 环境检测 · 加密  │       │
│         └──────────────────────────────┘       │
│              ↑ 提高门槛,但不提供最终信任        │
└────────────────────────────────────────────────┘

1.3 更重要的是把权威判断放对位置 ​

在游戏里,最需要保护的通常不是所有数据,而是少数关键状态:

关键状态为什么需要由服务端权威判定
战斗结果和结算结果直接影响段位、奖励、公平性
货币、道具、抽卡和交易资产直接影响经济循环和付费收入
匹配资格、段位、排行榜直接影响公平性和玩家留存
支付订单、发货状态和退款状态直接涉及真实资金

这些状态如果由客户端说了算,或者服务端只做形式校验,很快就会被利用。更稳妥的做法通常是:

  • 由服务端掌握最终结算和关键状态变化权
  • 对来自客户端的输入只接受"意图"或"候选动作",而不是直接接受结果
  • 对高价值操作建立幂等、频率限制和异常行为校验

1.4 反作弊不是只有外挂检测 ​

很多人一提反作弊,首先想到的是透视、加速、自动点击、内存修改。实际上,游戏里的作弊和滥用远不止这些:

作弊类型具体表现影响范围
外挂和脚本透视、加速、自动战斗、内存修改对战公平、资源经济
工作室和养号批量起号、脚本刷资源、代练经济循环、匹配质量
支付欺诈代充、退款套利、黑卡支付收入、平台信誉
活动漏洞利用利用配置漏洞、补偿漏洞刷资源活动效果、玩家公平
社交破坏恶意聊天、诈骗、引流社区生态、玩家留存

所以反作弊体系通常至少要分成几层:

  1. 客户端完整性和环境对抗:提高攻击门槛
  2. 服务端规则校验和异常行为检测:权威判定
  3. 经济与交易异常识别:资产保护
  4. 社交传播链和账号关联识别:关系图谱
  5. 处罚、申诉和回滚处置:治理闭环

只有做到最后一层,反作弊才真正形成治理能力。

1.5 常见建设方式与代价 ​

依赖第三方安全壳或反外挂 SDK ​

接入快,能挡掉一部分低水平攻击,也方便应对渠道或平台的最低要求。但它不可能理解你的玩法规则、经济逻辑和资产风险,因此只能作为基础门槛,不能替代核心校验。

业务内规则检测 ​

很多项目会在战斗、支付、活动、交易等核心模块里写大量规则。优点是贴业务,缺点是规则分散、审计困难、迭代慢,容易变成"谁出问题谁补一个 if"。

独立风控与作弊治理平台 ​

更成熟的做法是把高频信号、处罚策略、审计链路和人工复核平台做成统一能力。但这类平台只有在项目量够多、治理规则较稳定时才真正划算,否则容易平台很重、业务接不动。

text
安全建设路径建议
┌────────────────────────────────────────────────┐
│  第一阶段:基础安全                              │
│  ├── 服务端权威判定关键状态                      │
│  ├── 第三方安全 SDK 接入(满足渠道要求)          │
│  └── 基础操作审计                               │
├────────────────────────────────────────────────┤
│  第二阶段:业务规则                              │
│  ├── 核心模块内建校验规则                        │
│  ├── 经济异常检测                               │
│  └── 账号关联识别                               │
├────────────────────────────────────────────────┤
│  第三阶段:治理体系                              │
│  ├── 统一风控平台                               │
│  ├── 处罚梯度和申诉机制                         │
│  └── 人工复核和运营协同                         │
└────────────────────────────────────────────────┘

1.6 常见错误 ​

  • 认为接入了某个安全产品就等于完成安全建设
  • 只做外挂检测,不做资产、交易和活动规则保护
  • 关键状态仍让客户端主导,服务端只做表面校验
  • 命中异常后没有处罚、申诉和回滚方案

游戏安全真正成熟的标志,不是"有没有外挂 SDK",而是当攻击和作弊出现时,系统能否把最贵、最关键、最影响公平和资产的那条链路稳住。


2. 审计、隐私与数据安全 ​

很多团队把"数据安全"理解成数据库加密、备份和权限管理,把"审计"理解成后台操作日志,把"隐私"理解成上线前补一个隐私政策。真实项目里,这三件事其实共享同一个核心问题:谁能接触哪些数据,出问题时能不能说清楚数据被谁以什么方式使用过。

2.1 审计的重点不是记录,而是可追责 ​

一条"某管理员在某时间执行了某操作"的文本日志,通常并不能真正帮助团队处理事故。因为事故发生时,更重要的问题是:

审计关键问题为什么重要
改了哪些对象确定影响范围
改动前后分别是什么评估损失和恢复方式
操作依据是什么判断是否合规
是否批量执行评估规模
失败时停在什么位置确认状态一致性

这也是为什么高风险后台操作需要尽量结构化。查询、补发、扣回、解封、迁移、批量发奖、配置变更、热修任务,这些都不能只靠"有人点过按钮"来追。

2.2 隐私问题在游戏里并不边缘 ​

游戏经常会处理很多敏感或受约束信息:

  • 账号标识、手机号、实名信息
  • 设备信息、登录地点、支付信息
  • 聊天内容、举报记录、处罚记录
  • 用户行为轨迹和标签画像

这些信息一旦和商业化、推荐、风控、客服系统打通,就很容易在内部被广泛使用。风险并不只来自外部泄露,也来自内部过度访问、过度保留和超用途使用。

所以隐私治理不能只是法务文案,它需要落到具体实现里:

  • 这些数据是否真的需要采集
  • 是否做了最小化存储和分级访问
  • 谁在什么场景下能看到明文
  • 超出保留期限后是否能删、能脱敏、能冻结

2.3 数据安全最容易出问题的地方 ​

后台查询系统 ​

很多团队把客服、运营、研发查询都集中到一个大后台,结果越做越像"超级数据入口"。只要权限模型不细、审计不完整,这类系统本身就是最大的泄露面。

日志和导出 ​

线上日志、报表导出、临时排查脚本常常会无意间带出敏感字段。尤其是在排障和运营复盘过程中,大家会习惯性把截图、CSV、SQL 结果在群里传来传去,这通常比正式数据库访问更难治理。

第三方接入 ​

分析 SDK、广告 SDK、登录 SDK、支付 SDK、客服工具和营销平台都会接触部分用户数据。只要接入边界不清,内部已经脱敏的数据,可能在外部集成时又被重新拼成完整画像。

2.4 更现实的治理方式 ​

对大多数团队来说,数据安全更应该从几条最小实践开始:

text
数据安全最小实践
┌────────────────────────────────────────────────┐
│  1. 数据分级                                     │
│     ├── 对用户数据和后台操作做分级                │
│     └── 先识别最敏感的那部分                     │
├────────────────────────────────────────────────┤
│  2. 操作管控                                     │
│     ├── 查询、导出、批量操作需要留审计和审批链    │
│     └── 高风险操作需要双人确认                   │
├────────────────────────────────────────────────┤
│  3. 视图隔离                                     │
│     ├── 客服、运营、研发看到不同粒度的数据视图    │
│     └── 最小权限原则                             │
├────────────────────────────────────────────────┤
│  4. 脱敏习惯                                     │
│     ├── 日志、报表和临时脚本建立脱敏工具          │
│     └── 群聊中不传播明文敏感数据                 │
├────────────────────────────────────────────────┤
│  5. 第三方管控                                   │
│     ├── 对第三方 SDK 明确字段边界                │
│     └── 传输边界和保留边界                       │
└────────────────────────────────────────────────┘

2.5 为什么审计、隐私和数据安全要一起看 ​

因为这三者都在回答同一个问题:当敏感数据被访问、修改、传播或滥用时,团队有没有办法发现、阻断、追踪和补救。缺任何一个环节,体系都会失效:

  • 只有权限,没有审计,出了事不知道谁动过
  • 只有审计,没有最小权限,等于默认所有人都能看
  • 只有隐私文案,没有实际技术边界,最终仍然无法落地

2.6 常见错误 ​

  • 认为"内部系统"就不用做细粒度权限和审计
  • 日志、报表、导出链路不做脱敏,敏感数据四处扩散
  • 隐私治理停留在协议文案,不进入研发和运维流程
  • 把实名、支付、客服、聊天等高敏数据和普通业务数据同样对待

审计、隐私与数据安全真正成熟的状态,不是写了几份制度,而是当有人查询、导出、修改或泄露敏感数据时,系统知道发生了什么、影响了谁、该怎么止损。


3. 行为风控与治理体系 ​

风控如果只被理解成"抓作弊",那它最多只是一个检测模块。真正的治理体系要回答的是:当系统里持续出现异常行为、恶意利用、社区破坏和业务滥用时,团队能不能建立一套长期稳定的识别、判定、处置和申诉机制。

3.1 为什么行为风控本质上是业务治理 ​

游戏里的高风险行为,很多都不属于传统意义上的入侵攻击,而是"利用系统允许的表面行为达成不被允许的结果":

风险类型具体行为危害
资产风险盗刷、套利、洗号、异常交易经济损失、玩家信任下降
公平风险外挂、代练、排位操控、脚本对战竞技环境恶化、留存下降
社区风险辱骂、诈骗、引流、骚扰社区生态破坏、口碑损失
经营风险刷新增、刷召回、刷广告经营数据失真、广告欺诈

这些行为往往并不总是违反接口层规则,却会持续破坏经济、公平、社区和经营数据。因此风控天然属于业务治理,而不只是安全团队的附属品。

3.2 风控闭环至少要有哪几层 ​

text
风控治理闭环
┌──────────────────────────────────────────────────────┐
│                    信号采集                           │
│  登录 · 设备 · 支付 · 资产 · 社交 · 匹配 · 聊天 · 举报│
└──────────────────────┬───────────────────────────────┘
                       │
                       v
┌──────────────────────────────────────────────────────┐
│                    判定策略                           │
│  显式规则 · 统计阈值 · 画像对比 · 模型评分             │
└──────────────────────┬───────────────────────────────┘
                       │
                       v
┌──────────────────────────────────────────────────────┐
│                    处置策略                           │
│  禁言 · 冻结 · 限流 · 隔离匹配池 · 限制交易 · 封禁   │
└──────────────────────┬───────────────────────────────┘
                       │
                       v
┌──────────────────────────────────────────────────────┐
│                    人工复核                           │
│  高价值账号 · 误伤争议 · 批量事件升级处理              │
└──────────────────────┬───────────────────────────────┘
                       │
                       v
┌──────────────────────────────────────────────────────┐
│                    申诉与恢复                         │
│  解释依据 · 解除限制 · 补偿和回滚                     │
└──────────────────────────────────────────────────────┘

缺任何一个环节,治理都会变形。只有检测没有处置,风险只会持续累积;只有处置没有申诉,误伤会迅速制造舆情和客服压力。

3.3 为什么很多风控系统最后不工作 ​

因为它们只解决了"能不能打分",没有解决"这分数接下来怎么办"。典型问题包括:

  • 命中规则太多,但没有人知道哪些真的值得处置
  • 处罚动作过于激进,误伤正常用户
  • 处罚动作过于保守,黑产把规则当可接受成本
  • 申诉时拿不出证据,只能机械回复

这说明风控真正难的部分不在模型,而在治理策略和组织协同。

3.4 更有用的设计方式 ​

把风控对象分层 ​

不是所有风险都应该用同一种方式处理:

风险层级关注证据容忍度处罚策略
资产类风险资金流、交易记录极低严格封禁、冻结资产
公平类风险战斗数据、操作频率低限制匹配、降段位
社区类风险聊天内容、举报记录中禁言、限制社交功能
经营类风险参与数据、设备指纹中限制活动参与、标记

分层的价值在于,不同风险关注的证据、容忍度和处罚策略都不一样。

把处罚动作分梯度 ​

成熟系统一般不会只有"封"或"不封"两种结果:

text
处罚梯度设计
┌────────────────────────────────────────────┐
│  Level 1: 提示或警告                        │
│  Level 2: 限制某项能力                      │
│  Level 3: 冻结部分资产或交易能力             │
│  Level 4: 隔离到特殊匹配池                  │
│  Level 5: 临时封禁(1天 / 7天 / 30天)       │
│  Level 6: 永久封禁                          │
└────────────────────────────────────────────┘

这样做的好处是,可以在不确定时先控风险,在证据充分后再升级处罚。

3.5 风控和其他系统为什么需要联动 ​

行为风控很难单独完成闭环,它需要和这些能力协作:

  • 和审计协作:保存证据链和操作记录
  • 和客服协作:处理申诉、沟通和恢复
  • 和经济系统协作:识别异常流向和追缴资产
  • 和运营分析协作:避免黑产污染经营判断

如果这些系统割裂,风控就会陷入两个极端:要么命中很多但没人执行,要么执行了很多但团队解释不清。

3.6 常见错误 ​

  • 只关注外挂,不关注交易、社交和运营奖励滥用
  • 风控信号很多,但没有分层策略和处罚梯度
  • 误伤后没有复核、申诉和恢复流程
  • 风控数据与客服、审计、经济分析系统彼此断开

行为风控真正成熟的标志,不是模型多复杂,而是团队是否能把异常行为持续压制在可接受范围内,同时把误伤和治理成本控制住。


4. 合规、版号与平台约束 ​

很多技术团队习惯把合规看成"上线前最后再对一遍清单"的事情,但对游戏项目来说,合规和平台约束会持续反向塑造架构、功能边界和版本节奏。如果等到提审、上架、接渠道或跨地区发行时才补,代价通常已经非常高。

4.1 为什么合规会直接改变实现方式 ​

游戏不是一般意义上的内容产品,它同时会受到多种约束:

  • 内容审核和题材限制
  • 实名与未成年人保护要求
  • 支付、概率、公示和虚拟交易约束
  • 聊天、社交、举报和内容治理要求
  • 平台方对 SDK、登录、支付、广告和权限使用的规则

这些要求并不只是法务文档,它们最终都会落到技术实现:

合规要求技术影响
未成年人限制登录态、在线时长、消费能力、跨天结算逻辑
概率公示后台展示、数据留存、客服查询能力
渠道支付约束账号体系、版本节奏、热更新空间
内容审核聊天、UGC、公告和素材更新流程

4.2 版号和平台规则为什么不能后置 ​

在国内发行场景里,版号、实名认证、防沉迷、内容合规通常需要在设计期就纳入考虑。原因是很多要求不是 UI 层补个提示就能解决,而是直接进入核心流程:

  • 某些功能入口是否需要按年龄、实名状态或地区限制开放
  • 聊天、社交、活动文案和素材是否需要审核链路
  • 概率和付费信息是否需要长期可回查
  • 版本内容是否允许通过热更新单独下发

如果这些都到上线前才补,项目往往只能靠硬裁功能和临时旁路收场。

4.3 平台约束会改变你的技术自由度 ​

接不同平台、不同渠道、不同地区时,团队经常会发现原本以为理所当然的能力并不一定成立:

  • 不是所有平台都允许相同的热更新策略
  • 不是所有平台都允许同样的账号互通和支付互通
  • 不是所有 SDK 都能稳定提供相同字段和回调语义
  • 不是所有渠道都允许一致的广告、推送和社交能力

这意味着技术选型不能只追求"最统一",还要给差异和兜底留空间。

text
合规与平台约束的三层模型
┌────────────────────────────────────────────────┐
│  底层硬约束(全国统一,不可妥协)                │
│  ├── 实名认证与防沉迷                           │
│  ├── 支付安全与概率公示                         │
│  ├── 内容审核与数据处理                         │
│  └── 版号与发行资质                             │
├────────────────────────────────────────────────┤
│  适配层差异(按平台/渠道/地区适配)              │
│  ├── 不同平台的登录/支付 SDK                    │
│  ├── 不同渠道的审核规则                         │
│  └── 不同地区的内容要求                         │
├────────────────────────────────────────────────┤
│  运营与版本策略(按发行进度调整)                │
│  ├── 功能分地区开启                             │
│  ├── 活动分平台发布                             │
│  └── 灰度策略分渠道执行                         │
└────────────────────────────────────────────────┘

4.4 更现实的做法 ​

多数团队更适合把合规与平台约束拆成三层看:

  • 底层硬约束:实名、防沉迷、支付、内容审核、数据处理
  • 适配层差异:不同平台的登录、支付、广告、推送、审核规则
  • 运营与版本策略:哪些功能分地区、分平台、分审核阶段开启

这样做的好处是,底层硬约束更稳定,适配层可以局部变化,运营策略可以根据发行进度调整。

4.5 常见错误 ​

  • 认为合规只是法务责任,不进入研发设计
  • 直到提审或接渠道前才梳理平台差异
  • 假设所有地区、平台和版本都能共用同一套策略
  • 没有给内容审核、未成年人限制和概率回查留系统入口

合规、版号与平台约束真正成熟的状态,不是你知道多少规定,而是项目在不同发行约束下仍然能用清晰的技术边界稳定运行,而不是每次上线前都临时大改。


5. 许可风险与依赖治理 ​

很多项目能接受代码里有技术债,却很少真正把第三方依赖和许可证风险当成长期治理对象。结果往往是:开发期为了快,先接了很多 SDK、库、素材和工具;等到上线、融资、并购、出海或合规审查时,团队才发现已经说不清到底用了什么、哪些能商用、哪些需要开源回传、哪些供应商一旦失联就会卡住发布。

5.1 依赖风险为什么不只是法务问题 ​

依赖治理之所以重要,不仅因为许可证义务,也因为它会直接影响技术稳定性和业务连续性:

  • 第三方 SDK 可能崩溃、卡顿、泄露数据或改变接口
  • 开源组件可能停止维护、爆出漏洞或升级破坏兼容
  • 商业授权可能限制平台、地区、并发规模或二次分发方式
  • 关键工具链如果无人维护,会直接拖住构建、发布和运营

也就是说,依赖风险既是法律问题,也是供应链问题和工程治理问题。

5.2 游戏项目为什么更容易依赖失控 ​

游戏项目通常会接入大量外部能力,而且这些能力分散在客户端、服务端、运营后台和工具链中:

依赖类别典型组件风险等级
登录、支付、广告 SDK第三方账号、支付渠道、广告平台高
引擎插件和库物理引擎、音视频库、反外挂组件高
素材资源图像、字体、音频、动效、地图中
构建工具链打包脚本、热更工具、自动化平台中

这些依赖一旦没有统一登记和版本策略,就会出现几个常见问题:

  • 同一能力在不同项目接了不同供应商,维护成本持续上升
  • 升级一个 SDK 牵出多个不兼容问题,却没人知道受影响范围
  • 出现许可证争议时,团队无法证明素材或库的来源与授权范围

5.3 许可证问题最容易在哪些地方踩坑 ​

  • 把开源代码复制进项目但未保留许可证说明
  • 使用带有强传染义务的组件却没有评估分发方式
  • 商用素材、字体、音频的授权范围与实际发行平台不一致
  • 外包、插件市场或论坛获得的资源没有清晰来源记录

很多坑不是因为团队故意违规,而是因为开发早期没有把依赖当成资产来管理。

5.4 更实用的依赖治理方式 ​

对多数团队来说,依赖治理至少应该做到:

text
依赖治理清单模板
┌────────────────────────────────────────────────────────────┐
│  组件名称: XXX SDK                                          │
│  版本: 3.2.1                                               │
│  来源: GitHub / 商业授权 / 内部开发                          │
│  用途: 支付渠道对接                                         │
│  负责人: 张三                                               │
│  许可证类型: MIT / GPL / 商业                                │
│  最近更新: 2024-01-15                                       │
│  维护状态: 活跃 / 停滞 / 已废弃                              │
│  替代方案: ABC SDK                                          │
│  风险评估: 高(涉及支付)                                    │
│  准入审批: 已通过安全评审                                    │
└────────────────────────────────────────────────────────────┘

对高风险依赖建立准入流程,例如支付、账号、广告、数据 SDK 和核心开源库。

给客户端、服务端、工具链和素材资源分别做生命周期管理。

在版本升级和漏洞修复时,知道哪些项目和模块会受影响。

如果团队规模更大,还可以进一步做:

  • 依赖分级和审批
  • 许可证扫描与供应链安全扫描
  • 替代方案预案,避免关键供应商单点失效

5.5 为什么依赖治理要尽早做 ​

因为依赖一旦进入多个项目、多条发布链路和多个外包流程,再想回头统一会非常痛苦。相比之下,早期多花一点力气把来源、版本、授权和负责人记录清楚,成本低得多。

5.6 常见错误 ​

  • 只关心代码能不能跑,不关心依赖来自哪里、能不能长期用
  • 第三方 SDK 接入由单个开发者决定,没有统一登记和升级策略
  • 只管理代码库,不管理素材、字体、音频和外部工具授权
  • 直到被审查、被投诉或要出海时才回头梳理许可证问题

许可风险与依赖治理真正成熟的标志,不是清单做得多漂亮,而是当某个库爆漏洞、某个 SDK 被下架、某个素材授权被质疑时,团队能迅速知道影响范围、替代路径和处理责任人。


代码示例:风控闭环的最小实现 ​

本章偏治理与决策,通篇没有代码。但 1.3 的"权威判断放对位置"、3.2 的风控闭环、3.4 的分层与梯度,落到工程上都有很具体的代码形态。这一节给出最小实现——它不构成完整的风控系统,但每个函数都对应本章的一个核心论断。

权威校验:拒绝之外,还要发信号 ​

go
// 客户端上报只是声明:移动包声明"我从 A 走到了 B",服务端裁决是否可能
func (s *Session) OnMove(report MoveReport) {
    if !s.authority.MovePossible(s.player, report) {
        s.metrics.Inc("move_rejected")                 // 拒绝但不立刻处罚:单次异常可能是网络抖动
        s.risk.Emit(SignalSpeedAbnormal, s.player.ID)  // 作为信号累积,交给风控闭环
        s.player.RollbackTo(s.authority.LastConfirmed(s.player)) // 回滚到服务端已确认位置
        return
    }
    s.authority.Commit(s.player, report)               // 合法才写入权威状态
}

// 数值同理:购买声明"我花 10 钻买礼包",价格以服务端配置表为准
func (s *Session) OnBuy(req BuyRequest) error {
    goods := s.config.Goods(req.GoodsID)               // 价格、限购次数查表,不信客户端
    if goods == nil || req.Price != goods.Price {
        return ErrIllegalRequest                       // 与表不符:直接拒绝,并记入审计日志
    }
    return s.wallet.Charge(s.player, goods)
}

注意第一段的处理方式:拒绝、回滚、发信号是三个独立动作。直接封号是把"单次异常"当成"定罪",误伤网络差的玩家;正确的做法是拒绝生效、状态回滚、信号进入画像累积——处罚是风控闭环的事,不是校验器的事。

信号累积与处置梯度 ​

go
// 信号只是信号:单条不定罪,按层级累积、随时间衰减
type RiskProfile struct {
    fair    float64 // 公平类分数:加速、胜率、操作频率(对应 3.4 的风险分层)
    asset   float64 // 资产类分数:异常交易、资金流向
    signals []Signal
}

func (e *RiskEngine) Evaluate(p *RiskProfile) Disposition {
    switch {
    case p.asset > assetFreezeThreshold:
        return Disposition{Level: 3, Act: e.freezeTrade}          // 冻结交易能力,资产待查
    case p.fair > fairQuarantineThreshold:
        return Disposition{Level: 4, Act: e.isolateToShadowPool}  // 隔离到特殊匹配池
    case p.fair > fairLimitThreshold:
        return Disposition{Level: 2, Act: e.limitMatching}        // 限制匹配,继续观察
    case p.any() > observeThreshold:
        return Disposition{Level: 1, Act: e.auditOnly}            // 证据不足:只记录不处置
    }
    return DispositionNone
}

三个关键设计都直接对应本章论断:按层级分分数(3.4 的风险分层——资产类容忍度极低所以阈值最低档也重罚,公平类可先限制观察);处置有梯度(不确定时先控风险,证据充分再升级,每一级都可回退);观察也是处置(Level 1 不动玩家,只让审计盯住)。

处置留痕:可申诉的证据链 ​

go
// 每一次处置都生成审计事件:谁、为什么、依据什么信号、怎么申诉
func (e *RiskEngine) audit(p *RiskProfile, d Disposition) {
    e.auditLog.Append(AuditEvent{
        PlayerID: p.ID,
        Action:   d.String(),
        Signals:  p.topSignals(3),  // 触发处置的信号及权重——申诉时客服能看懂依据
        RuleVer:  e.ruleVersion,    // 规则版本——复盘时能还原"当时为什么这么判"
        At:       time.Now(),
    })
    d.Act(p) // 先留痕,后执行:处置动作的执行顺序也是可审计的
}

呼应本章 2.1 的结论:审计的重点不是记录,而是可追责。没有 Signals 和 RuleVer 的封禁日志,在申诉场景里等于没有日志——客服无法向玩家解释依据,团队无法在规则改版后复盘误伤。

这三段合起来就是 3.2 风控闭环的最小形态:信号采集(权威校验的拒绝)→ 累积画像 → 分层处置(梯度)→ 审计留痕(可申诉)。风控系统真正的分水岭不在模型精度,而在每一环是否可解释、可回退——这正是 3.3 说"很多风控系统最后不工作"的根源。


6. 常见误区与总结 ​

6.1 安全与反作弊常见误区 ​

误区后果推荐做法
接入安全产品 = 安全建设完成低水平攻击挡住了,高级攻击畅通无阻安全产品只是基础门槛
只做外挂检测资产、交易、活动漏洞被忽略围绕业务主链路设计安全
关键状态客户端说了算被篡改后服务端无法验证服务端掌握权威判定
没有处罚和申诉机制发现了也没法处置完善治理闭环

6.2 审计与隐私常见误区 ​

误区后果推荐做法
内部系统不用做权限和审计内部人员越权无法追踪最小权限 + 操作审计
日志导出不做脱敏敏感数据在群聊扩散建立脱敏工具和习惯
隐私治理只做协议文案技术层面无法落地隐私要求进入研发流程
高敏数据和普通数据同等对待客服能看支付信息数据分级 + 视图隔离

6.3 风控治理常见误区 ​

误区后果推荐做法
风控 = 外挂检测交易、社交、运营滥用被忽略多维度风险识别
只有检测没有处置风险持续累积完善处罚梯度
误伤后没有申诉玩家投诉、舆情危机建立复核和恢复流程
风控系统孤立数据断开,无法闭环与审计、客服、经济系统联动

6.4 合规与依赖常见误区 ​

误区后果推荐做法
合规是法务责任,不进研发上线前临时砍功能合规要求前置到设计阶段
提审前才梳理平台差异包体、权限、SDK 全面返工多平台差异纳入版本设计
不管依赖来源和许可证出海、融资、审查时被动依赖作为资产统一管理
只管代码不管素材授权字体、音频被投诉侵权素材资源纳入依赖治理

6.5 核心要点 ​

安全、风控与合规三者虽然关注点不同,但共享同一个目标:当问题出现时,系统能不能发现、阻断、追踪和补救。

一套成熟的安全治理体系需要同时具备:

  1. 服务端权威判定:关键状态不信任客户端,由服务端掌握最终裁决权
  2. 业务主链路安全:围绕支付、资产、匹配、社交等核心链路设计防护
  3. 审计与隐私闭环:数据分级、最小权限、操作审计、脱敏习惯
  4. 风控治理闭环:信号采集、判定策略、处罚梯度、人工复核、申诉恢复
  5. 合规前置设计:版号、防沉迷、平台约束在设计阶段纳入,不等提审才补
  6. 依赖治理常态化:统一登记、版本管理、许可证扫描、替代方案预案

缺少其中任何一个环节,安全治理体系都会在某个压力点崩溃。而真正的成熟标志不是"有没有某个产品",而是当攻击、作弊、泄露或合规问题出现时,团队能多快发现、多快止损、多快恢复。


7. 实战案例:一次「金币通胀 15%」的刷金工作室排查 ​

案例为教学示例(非摘自真实项目),数字经过取整简化。前四批案例走口径、重复、丢失与监控长尾,本案例走经济安全——同一套排查纪律(先对口径、再拆维度)用在刷金排查上,终点是风控信号层而不是修复补丁。

背景与现象:月初安全周报亮黄灯:金币净增连续 5 天为正、累计超出存量 15%,可交易物品物价指数周环比 +12%,论坛出现「物价飞涨」的抱怨。同时三条「正常」同时在场:反外挂样本未检出新木马、当周无新活动投放、无新版本——按「有没有出事」的常规检查,一切正常。

第一步:先对口径——通胀的分子分母拆开(呼应第 12 讲口径治理) ​

通胀 = 净增的堆积,净增 = 系统产出 − 系统回收。三个口径陷阱先排除:①玩家间交易是转移,不计入产出;②拍卖行成交额 ≠ 产出(它只是所有权轮换);③补偿与邮件发放按「来源标记」归入对应产出项,不能混进掉落。对齐后:产出 8.6 亿/日、回收 7.1 亿/日、净增 1.5 亿/日,而基线净增只有 0.4 亿/日——超额 1.1 亿/日,方向明确:是产出端异常,回收完全正常(若按「回收失效」方向排查会全盘错)。周报的 15% 当场复算:5 天超额累计 5.5 亿,相对市场存量 36 亿 ≈ 通胀 15%——口径闭环。

第二步:维度拆分——从日级异常收敛到账号级画像 ​

  • 按产出来源:异常几乎全部集中在副本「熔岩矿洞」——掉落从基线 0.1 亿/日飙到 1.0 亿/日(+0.9 亿,占超额 82%);任务、活动、其他副本持平
  • 按账号:Top 312 个账号(占日活 0.04%)贡献 0.7 亿/日,聚类特征高度一致:注册集中在近 10 天、日均在线 21.4 小时、固定 5 人组队、掉落物流向同一批买家(交易对手高度重合)
  • 反外挂样本「未检出」并不矛盾:脚本走的全是「正常操作」路径——无加速、无内存修改、无异常封包。行为模式异常而非程序异常,这正是 1.4 节「反作弊不只有外挂检测」的现实注脚

第三步:根因——渐进式生长的风险,不撞单点告警 ​

  1. 直接原因:312 个工作室账号脚本化刷打熔岩矿洞,掉落可交易且无产出上限
  2. 机制原因:风控规则按「单点特征」设计(加速/内存/封包异常),缺少「正常操作的规模化农场」联合规则(在线时长 × 日产 × 交易流向聚类)——3.2 节风控闭环的信号层在这里缺位
  3. 生长原因:副本收益是上月数值调优抬高的,生长是逐周缓慢的,越线是本月才显性的——渐进式风险不会触发任何以「单点异常」为条件的告警

第四步:处置与回填 ​

处置顺序(先控增量、再清存量、后补口径):

text
T+0 上午   熔岩矿洞可交易掉落临时改绑定(服务端热配),增量止血
T+0 下午   312 账号按证据链批量封禁(Signals + RuleVer 留痕,可申诉)
T+1        异常产出金币双路径回收:异常资产冻结 + 过期邮件回收
T+2        交易流向图移交人工复核队列,下游买家按梯度处置
T+3        净增回落至基线附近,物价指数止涨

T+3 复核:净增回落到 0.5 亿/日(贴近基线 0.4),处置链闭环。

回填清单(呼应第 14 讲复盘回填纪律):

回填项归属完成标准
金币净产出口径入指标字典(产出/回收/净增三列,交易不计产出)数据指标字典登记
日报告警:副本掉落环比 + Top 0.05% 账号产出占比安全/数据告警演练一次
联合风控规则:日产阈值 × 在线 > 18h × 交易对手集中度安全误报率评审通过
高收益可交易掉落的绑定/上限评审进数值变更检查单策划/服务端评审通过
封禁证据链与申诉流程演练(呼应 2.1 可追责)安全/客服演练一次

案例的三个教训 ​

  1. 先拆分子分母,再谈异常。通胀排查第一步永远是产出 vs 回收——本次回收完全正常,方向定错的排查会在监控数据里打转
  2. 「未检出外挂」不等于「没有工作室」。程序异常检测覆盖不了规模化正常行为,行为聚类(时长 × 产出 × 流向)才是农场的照妖镜(1.4/3.2)
  3. 渐进式风险不会撞单点告警。收益提升是上月的、生长是缓慢的、越线是本月的——告警要对「趋势与结构」设,不只对「单点异常」设

游戏知识体系