2010-03-26 70 views
4

首先,我会说我是完全新的安全编码。我目前正在帮助一位朋友开发一个小型游戏(使用Python),它将拥有一个登录服务器。我对安全性知之甚少,但我知道很多游戏都有这方面的问题。从第三方应用程序(机器人)到WPE数据包操作的一切。考虑到这款游戏会有多小以及用户群有限,我怀疑我们会遇到严重问题,但是我们想尽力限制问题。我不确定从哪里开始,或者我应该使用什么方法,或者什么是值得的。例如,向服务器发送数据,例如登录名和密码。游戏登录认证和安全

有人告诉我,他的信息应该在这样情况下有人查看它在发送时被加密,(用任何手段),他们不能进入该帐户。但是,如果某人能够捕获加密的字符串,那么这个字符串是否会始终工作,因为它是解密的服务器端?换句话说,有人可以捕获数据包,重新使用它,并仍然可以访问该帐户?

的主要目标,我真正需要的是,以确保玩家登录到与我们提供的客户端游戏,并确保它的“安全”(宽,我知道)。我浏览过不同的方法,例如公钥和私钥加密,我相信任何十六进制编辑器最终都能找到。现在还有很多其他方法似乎超出了我的头脑,并留下了过度杀伤的印象。

我意识到没有什么是100%的安全。我只是寻找任何输入或阅读材料(链接)来完成上述主要目标。希望有任何帮助,谢谢。

+0

你真的必须至少有两个问题在这里:一个是关于如何确保对密码嗅探,重播攻击和网络消息篡改,另一个是关于如何验证而非用户帐户,但*客户端代码*是正在运行。 – keturn 2010-03-26 20:10:07

+0

啊,这是真的,客户代码认证也是我所指的。 – Charles 2010-03-26 20:23:23

回答

1

这是一个棘手的问题,因为代码在客户端上运行。通过让服务器发送客户端添加到字符串中的随机令牌进行加密,可以解决重播问题。这样,密码字符串每次都会有所不同,并且重放加密的字符串不起作用(因为服务器会检查加密的密码是否有最后发送的令牌)

问题是加密密钥必须是存储在客户端上,并且可以检索该密钥。

+0

这就是VAC和PunkBuster等各种反作弊系统所要解决的问题。正如你所说,这是一个难题,而Python并没有让它变得更容易。我想我会研究EVE Online在做什么,因为他们的客户端(至少部分)是Python。 – keturn 2010-03-26 20:16:35

1

虽然可能被认为是矫枉过正这个特定的应用程序(小游戏,有限的用户群),你应该认真考虑使用oAuth,因为这个应用程序为您提供了一个很好的机会去学习这种技术(这是真正坚实和广泛的,并且传播越来越多! - )将来应用它 - 它是由具有强大安全背景的优秀程序员设计和实施的。你可以学习他们的教程,以获得一个坚实的理解和背景,然后使用库,比如python-oauth2在你的桌面应用程序简单,高效地实施的OAuth。

+0

尽管我喜欢看到人们插入OAuth,但它对于通过HTTP通道验证API请求最为有用。如果你的客户/服务器通信不是通过HTTP,那将是一个奇怪的选择。 – keturn 2010-03-26 20:04:32

+0

感谢您的建议,是的,我们没有使用HTTP。我不确定它是否能够适应其他情况,但会至少进行调查。 – Charles 2010-03-26 20:19:27

+0

您可以随时添加第二个频道,HTTP或甚至更好的HTTPS,仅用于验证和获取授权。 – 2010-03-26 21:29:12

1

如何保护密码通过网络,重播攻击和消息篡改的简单答案是:使用SSL。是的,您还可以使用挑战 - 响应身份验证方案为登录部分做其他事情,但听起来您确实希望整个渠道都受到保护。在套接字层使用SSL,然后您无需做任何其他复杂的事情来发送凭证。

1

至于如何保护客户......最现实的是​​说你不知道。在编写服务器代码时,不要相信客户端发送给您的任何数据。切勿向客户提供任何您不希望玩家拥有的信息。在某些游戏中,像国际象棋(或者真的是任何基于回合的游戏),这种游戏实际上运行得很好,因为服务器很容易验证客户传入的动作是否合法。

在其他比赛中,那些限制不是那么实用,然后我不知道你会怎么做,从代码的角度。我试图在这一点上将问题转移到社交问题上:你相信其他玩家会把自己的骰子带到你的赌桌上吗?如果不是,你可以和其他人一起玩吗?