【问题标题】:client-server game secure architecture客户端-服务器游戏安全架构
【发布时间】:2013-08-18 11:22:35
【问题描述】:

我目前正在设计一款分布式 iOs 游戏。它必须包含某种身份验证(我认为是用户名、密码对,但如果有,请给我其他想法)。我打算通过一个用 Perl 编码的简单 RESTful API 来实现。

我知道这是一个经典的问题。我在网上看到很多帖子都在谈论如何安全地做到这一点。然而,太多的信息会扼杀它的信息化目标。所以,我有点失落。尽管如此,我还是试图指出基本概念,即:

  • 使用SSL(所以使用https url),它让你不用考虑加密
  • 使用在服务器和客户端之间共享的嵌入式私钥,但是如何嵌入它们是个问题!它允许使用 HMAC 并进行某种身份验证。
  • 忘掉绝对的安全(因为你使用安全是默默无闻的):如果有人可以通过反编译你的应用程序来破坏你的安全,你就会遇到问题!

以下是问题:

  • 如何共享私钥?
  • 向服务器发送什么?用户名/密码加密?一些 api 密钥?
  • 我是否有正确的方法(确保个人宁静 api)?

谢谢!

【问题讨论】:

    标签: iphone security client-server


    【解决方案1】:

    首先,这是一个相当广泛的问题。所以它可能会因此而关闭。

    尝试将您的问题分解为子问题/子注释

    1) 首先也是最重要的,正如您所指出的。没有绝对的安全。您应该定义什么是有价值的(您要保护什么)以及您要保护的对象是:

    • 未经授权的用户
    • 了解您的应用的未经授权的用户(逆向工程)
    • 对您的应用有深入了解的授权用户(逆向工程)

    1) https 是“必须的”。如您所见,您不必担心隐私和完整性。

    2) 在大多数情况下,应用程序应该发送用户名和普通密码。此密码应由服务器进行哈希处理(不要忘记向其中添加一些盐)并与数据库中存储的哈希值进行比较。

    3) 我认为您不需要在客户端和服务器之间共享任何私钥,原因如下:

    • SSL 确保隐私(因此没有人可以窃听)
    • 使用硬编码的共享密钥加密任何参数并没有太大帮助(它可以被逆向工程并从您的应用程序中提取)

    【讨论】:

    • 感谢您的回答。是的,我知道我的问题太宽泛了。对不起!您如何建议我将用户名/密码对发送到服务器:使用 SSL 的简单 GET 请求?还是经典的 http 摘要身份验证?这里有安全问题吗?我必须在每个请求中发送凭据还是为下一个请求设置一种票证。
    • 我会说,这取决于您的服务器端。看看你的框架中有什么可用的并使用它(不要重新发明自行车)。很常见的方法是发出长寿的安全cookie(一般来说——一张票),用于所有后续请求。
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多