我目前正在编写一对客户端/服务器应用程序。我最近提出的问题是“如何阻止某人编写自己的客户端应用程序并使用我们的服务器?”我真的没有回答这个问题,因为我迄今为止所做的所有安全通信工作都是确保客户端和服务器之间的通信是加密的。这与此思路背道而驰 - 我如何确保另一端的客户端应用程序是我想要与之交谈的客户端应用程序(而不是假装成我的客户端应用程序的人)?
任何人都有任何想法以合理的方式做到这一点?
答案 0 :(得分:3)
你无法确保这样的事情。服务器唯一看到的是通信,如果不同的客户端应用程序的行为与客户端应用程序完全相同,则无法看到差异。
为什么只有您自己的客户端应用程序才能与您的服务器通信?如果是安全性,那么您的安全设计是错误的。简单的事实是服务器永远不会信任客户端应用程序,即使它是您自己的客户端应用程序也是如此。
答案 1 :(得分:0)
如果不了解您的服务器做什么以及客户是谁,这很难回答。但有几种选择:
答案 2 :(得分:0)
为什么呢?如果客户端环境不受控制且某些第三方客户端可以安装在那里,没有什么可以完全阻止用户篡改官方客户端,所以任何安全相关都应该在服务器端完成,在这种情况下第三方客户端不是问题或者应该控制环境。
如果需要,频繁的协议更改以及推送到客户端的自动更新可能会阻碍替代客户端开发。 (exterrogated case:客户端只包含bootstrap,从服务器下载应用程序。协议和相应的应用程序部分与每个副本一样更改病毒)。
许可证和律师也可以在这方面提供帮助
答案 3 :(得分:-1)
挑战/回应是一种方式。
在您的应用程序(客户端和服务器)中嵌入序列号和该序列号唯一的密钥。然后,当客户端附加并发送它的序列号时,服务器将计算要发送给客户端的质询(使用已知密钥)。当客户端收到质询时,它必须响应响应(它从它的内部密钥计算)。