【发布时间】:2010-11-16 08:18:31
【问题描述】:
我目前正在编写一对客户端/服务器应用程序。最近有人向我提出了一个问题:“我如何防止有人编写他们自己的客户端应用程序并使用我们的服务器?”我真的没有这个问题的答案,因为我迄今为止所做的所有安全通信都是为了确保客户端和服务器之间的通信是加密的。这将背离那种思路——我如何确保另一端的客户端应用程序是我想与之交谈的客户端应用程序(而不是假装是我的客户端应用程序的人)?
有人对合理的方法有任何想法吗?
【问题讨论】:
我目前正在编写一对客户端/服务器应用程序。最近有人向我提出了一个问题:“我如何防止有人编写他们自己的客户端应用程序并使用我们的服务器?”我真的没有这个问题的答案,因为我迄今为止所做的所有安全通信都是为了确保客户端和服务器之间的通信是加密的。这将背离那种思路——我如何确保另一端的客户端应用程序是我想与之交谈的客户端应用程序(而不是假装是我的客户端应用程序的人)?
有人对合理的方法有任何想法吗?
【问题讨论】:
你无法确保这样的事情。服务器看到的唯一内容是通信,如果不同的客户端应用程序的行为与您的客户端应用程序完全相同,您将看不到差异。
为什么只有您自己的客户端应用程序才能与您的服务器通信很重要?如果是关于安全,那么你的安全设计是错误的。一个简单的事实是,客户端应用程序永远不会被服务器信任,即使它是您自己的客户端应用程序也是如此。
【讨论】:
如果不进一步了解您的服务器做什么以及客户是谁,这很难回答。但是有两种选择:
【讨论】:
为什么?如果客户端环境不受控制并且可以安装一些第三方客户端,没有什么可以完全阻止用户篡改官方客户端,所以任何与安全相关的事情都应该在服务器端完成,在这种情况下第三方客户端没有问题,或者环境应该被控制。
如果需要,频繁的协议更改以及推送到客户端的自动更新可能会阻碍替代客户端的开发。 (exerrogated case: client仅由bootstrap组成,从服务器下载应用程序。协议和相应的应用程序部分随着每个副本都像病毒一样变化)。
许可证和律师也可以在这里提供帮助
【讨论】:
挑战/回应是一种方式。
在您的应用程序(客户端和服务器)中嵌入序列号和该序列号唯一的密钥。然后,当客户端附加并发送它的序列号时,服务器将计算要发送给客户端的质询(使用已知密钥)。当客户端收到质询时,它必须以响应(它根据其内部密钥计算)进行响应。
【讨论】: