基本设计决策可以作为“第一步”安全措施,以阻止利用行为。核心原则是设计出作弊几乎不可能发生或不会带来实际优势的系统,而不是在事后检测和防止作弊。
考虑一个射击游戏,玩家通过击杀来获得积分。一名利用者可能会创建机器人,瞬移到同一位置以反复被击杀,从而轻松获得积分。这个场景说明了反应式与防御性设计的区别:
| 策略 | 可预测结果 |
|---|---|
| 通过编写代码追踪机器人,试图检测它们(反应式方法)。 | |
| 减少或直接取消新生成玩家击杀获得的积分(防御性方法)。 |
其他防御性设计场景:
| 潜在利用场景 | 反应式方法(效果较差) | 防御性方法(效果较好) |
|---|---|---|
| (障碍赛)利用者瞬移到终点以领取奖励 | 只检查玩家的最终位置,并尝试检测不可能的完成时间 | 设计时使用强制性的、顺序的检查点。服务器验证每个检查点是否按顺序被激活,然后再授予奖励。你可以通过标记那些完成阶段的速度快于人类可能的玩家来添加另一层防护。体验的设计(要求有检查点)使得有效的服务器端验证成为可能。 |
| (战斗)客户端报告造成不可能的伤害数值 | 尝试检测并过滤掉不可能的伤害值 | 服务器根据服务器端的武器统计信息计算所有伤害,并通过服务器端的射线检测确认命中 |
| (经济)利用者通过快速请求复制物品 | 尝试检测重复请求或异常模式 | 实现服务器端的冷却时间,并根据当前玩家的库存状态验证所有交易 |