【问题标题】:Securing data in untrusted environments在不受信任的环境中保护数据
【发布时间】:2015-07-06 03:42:25
【问题描述】:

我一直在寻找,但找不到可以帮助我的好答案。为了解释这种情况,我正在创建一个具有多人系统的 Unity3D 游戏。
为了尽可能保证玩家数据的安全(这样人们就不会轻易作弊),我决定实现一个连接到 SQL Server 数据库的 Web API 2 服务。
我设计 Web 服务的方式是,只有当请求包含特定数据时才会处理请求。
我现在遇到的问题是设计一个解决方案,让我可以从 Web 发送/检索数据服务。
我实现了 SHA-512 来发送密码,因此数据包嗅探器无法以纯文本形式获取它,并且我计划实现 HTTPS,但 Unity 类使其变得非常困难。我曾想过将 RijdnaelManaged 实现为一种更安全的帐户算法,但在 Unity 中,代码很容易进行逆向工程。
这种模型是否足够安全,可以阻止脚本小子入侵玩家帐户?

【问题讨论】:

  • 除非您为用户实施登录机制,否则加密/https 等将无法解决您的问题。您应该将关键数据存储在服务器上(每个用户),而不是信任从客户端发送的数据(代表点、级别等)。
  • @EZI 已经实现了登录系统。开始游戏后,用户必须登录或创建帐户
  • 那你只能将用户的action发送到服务器,不能发送客户端的state
  • @EZI,如果我不信任用户发送给我的内容,我将如何获得用户的持续进度?
  • 假设您的游戏使用箭头键移动,您可以将移动(不一定是每个移动)发布到服务器,以计算其在地图上的位置。 (当我说 “不信任客户” 我的意思是不要尝试它的 state 就像 “我在 10 级”“我有那么多钱”

标签: c# security asp.net-web-api unity3d


【解决方案1】:

HTTPS

我实现了 SHA-512 来发送密码,因此数据包嗅探器不会以纯文本形式获取它,

就您的网络服务而言,这无济于事,它现在使用哈希作为其密码,因此任何嗅探它的人仍会捕获它。

使用 https,而不是 http 来正确处理。

如果您确实不能:构建一个系统,其中服务首先发出质询,然后客户端“签署”该质询并将签名发回。到目前为止,这仍然不如 https,但它可以防止一些事情(但不能防止中间人攻击)。

安全

如果您着眼于分析风险,则需要注意解决游戏用户以及第三方问题。

第 3 方,具有良好的密码(祝你好运)或适当的 2 因素身份验证、https 等,您可以很好地覆盖基础。在 web 服务中添加一些安全性,你应该是一个很好的方法。

但您还必须与游戏的用户打交道。这比看起来更难,因为他们可以在调试器中运行你的游戏,并弄清楚游戏如何与服务器通信以及它何时发送什么,效果是什么等等。如果你有一个多人游戏通常涉及可以获取和/或交易的虚拟商品和/或货币。狡猾的玩家会尝试以简单的方式获得它,因此您也需要以某种方式防止这种情况发生。
最简单的做法是将游戏逻辑移动到服务器中,并仅将客户端用于可视化事物 - 但这显然意味着您会更多地使用服务器资源...... 信任您的客户端正在运行,未经修改,并且您正在与它交谈:您不能...

【讨论】:

  • 好的,所以我完全必须实现 HTTPS... 游戏的“基础”是一个包含所有内容的对象,该对象在 protobuf-net 中序列化发送,因此任何更改都不会发生不被游戏制作的物体会被彻底摧毁。非游戏内获得的物品/货币将完全由服务器和 Google Play 商店管理,但仍不确定如何。
  • 记住 SSL(https 使用 SSL)仅在数据在两个端点之间传输时保护数据,而不是在任一端点上。本质上,您的服务器不能 100% 确定它正在与您的客户交谈。你可以设置障碍和混淆事物,但它们可以被有意愿的攻击者相对容易地通过。
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2011-10-24
  • 2016-01-26
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多