如何防止非法客户端应用程序使用我的服务器?

3
我正在编写一对客户端/服务器应用程序。最近我遇到了一个问题:“如何防止别人编写自己的客户端应用程序并使用我们的服务器?”我真的没有答案,因为我迄今为止所做的所有安全通信都是为了确保客户端和服务器之间的通信是加密的。这将是一种不同的思路,即如何确保另一端的客户端应用程序是我想要交流的客户端应用程序(而不是假冒我的客户端应用程序)?
有没有人有任何合理的想法来解决这个问题?
4个回答

3

你无法保证这样的事情。服务器所看到的只是通信,如果不同的客户端应用程序与您的客户端应用程序完全相同,则无法看到差异。

为什么只有您自己的客户端应用程序可以与您的服务器通信很重要?如果涉及安全问题,那么您的安全设计是错误的。简单的事实是,服务器永远不能信任客户端应用程序,即使它是您自己的客户端应用程序。


0

如果不了解您的服务器功能和客户端身份,这个问题很难回答。但是有几个选项:

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

1
  1. IP地址可以是动态的,可以是共享的,但仍不能确保使用正确的客户端软件。
  2. 未经授权的客户端应用程序可以使用相同的客户端证书。这并不会防止其他客户端应用程序使用服务器。
- Tommy Carlier

0
为什么呢?如果客户环境无法控制且允许安装第三方客户端,那么没有任何办法可以完全防止用户篡改官方客户端,所以与安全相关的事情应该在服务器端进行处理,在这种情况下,第三方客户端就不是问题了,或者可以控制环境。
如果需要的话,频繁的协议更改和自动更新推送到客户端可能会妨碍替代客户端的开发。(假设情景:客户端只包含引导程序,从服务器下载应用程序。协议和相应的应用程序部分会随每个副本而病毒般地改变)。
许可证和律师也可以在这方面提供帮助。

-1

挑战/响应是一种方式。

在您的应用程序(客户端和服务器)中嵌入一个序列号和与该序列号唯一对应的密钥。然后,当客户端连接并发送其序列号时,服务器将使用已知密钥计算要发送到客户端的挑战。当客户端接收到挑战时,它必须用其内部密钥计算出响应。


1
在客户端应用程序中隐藏东西并不安全。从客户端应用程序中提取“隐藏”的数据实际上并不难。 - Tommy Carlier
定义“真的不难”,GSM已经使用这种方法15年以上了。到目前为止,暴力破解是唯一成功的方法。 - KevinDTimm
这些不满分子最开始是从哪里获取客户端应用程序的? - KevinDTimm
这些不满者首先从哪里获取客户端应用程序呢? 和合法用户获取的方式一样。客户端应用程序通常是公开的。 - Tommy Carlier
1 - 通过混淆来保护安全性 - 是正确的,但机制并不重要,他们仍然需要拥有密钥。 2 - 是的,我能理解,尽管这不是我的阅读方式。 3 - 我说的是嵌入式,你假设为隐藏(我们之间的语义分歧)。共享才是我的意思,尽管从回复中并不清楚。 - KevinDTimm
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接