【问题标题】:How do I prevent non-legit client apps from using my server?如何防止非法客户端应用程序使用我的服务器?
【发布时间】:2010-11-16 08:18:31
【问题描述】:

我目前正在编写一对客户端/服务器应用程序。最近有人向我提出了一个问题:“我如何防止有人编写他们自己的客户端应用程序并使用我们的服务器?”我真的没有这个问题的答案,因为我迄今为止所做的所有安全通信都是为了确保客户端和服务器之间的通信是加密的。这将背离那种思路——我如何确保另一端的客户端应用程序是我想与之交谈的客户端应用程序(而不是假装是我的客户端应用程序的人)?

有人对合理的方法有任何想法吗?

【问题讨论】:

    标签: client-server security


    【解决方案1】:

    你无法确保这样的事情。服务器看到的唯一内容是通信,如果不同的客户端应用程序的行为与您的客户端应用程序完全相同,您将看不到差异。

    为什么只有您自己的客户端应用程序才能与您的服务器通信很重要?如果是关于安全,那么你的安全设计是错误的。一个简单的事实是,客户端应用程序永远不会被服务器信任,即使它是您自己的客户端应用程序也是如此。

    【讨论】:

      【解决方案2】:

      如果不进一步了解您的服务器做什么以及客户是谁,这很难回答。但是有两种选择:

      1. 查看客户端的 IP。如果客户端数量较少,维护允许使用您的系统的 IP 列表应该很容易。
      2. 既然您已经在使用加密,何不更进一步,使用客户端证书?

      【讨论】:

      • 1. IP 地址可以是动态的、可以共享的,但仍不能确保使用正确的客户端软件。 2. 未经授权的客户端应用程序可以使用相同的客户端证书。这不会阻止其他客户端应用程序使用服务器。
      【解决方案3】:

      为什么?如果客户端环境不受控制并且可以安装一些第三方客户端,没有什么可以完全阻止用户篡改官方客户端,所以任何与安全相关的事情都应该在服务器端完成,在这种情况下第三方客户端没有问题,或者环境应该被控制。

      如果需要,频繁的协议更改以及推送到客户端的自动更新可能会阻碍替代客户端的开发。 (exerrogated case: client仅由bootstrap组成,从服务器下载应用程序。协议和相应的应用程序部分随着每个副本都像病毒一样变化)。

      许可证和律师也可以在这里提供帮助

      【讨论】:

        【解决方案4】:

        挑战/回应是一种方式。

        在您的应用程序(客户端和服务器)中嵌入序列号和该序列号唯一的密钥。然后,当客户端附加并发送它的序列号时,服务器将计算要发送给客户端的质询(使用已知密钥)。当客户端收到质询时,它必须以响应(它根据其内部密钥计算)进行响应。

        【讨论】:

        • 在客户端应用程序中隐藏内容是不安全的。从客户端应用程序中提取“隐藏”数据真的不难。
        • 定义“真的不难” GSM 已经使用这种方法超过 15 年了。到目前为止,暴力破解是唯一成功的。
        • 另外,这些恶意软件首先从哪里获取客户端应用程序?
        • 还要注意,这定义了 PSK-TLS,并且被广泛使用。
        • “通过默​​默无闻的安全性”(就像 GSM 使用的一样)通常不是一种好的安全性。 GSM(A5/1)使用的加密机制不是暴力破解,而是逆向破解。
        猜你喜欢
        • 2015-03-29
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多