Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止来自非法客户端的连接_Java_Security - Fatal编程技术网

Java 防止来自非法客户端的连接

Java 防止来自非法客户端的连接,java,security,Java,Security,我有一个Java的客户机/服务器设置。客户端当前将计算值传输到服务器(除了登录/密码之外,还通过套接字)以进行身份验证 然而,目前没有任何东西可以阻止恶意反编译和重构的客户机连接,因为它只需要发送相同的身份验证数据 鉴于反编译揭示了我的客户机正在做的一切,真的有什么方法可以合理地阻止来自修改过的客户机的连接吗?在我看来,实现这一点的唯一方法是生成一个唯一的令牌,而经过修改的客户端(具有相同的令牌生成逻辑)在某种程度上无法生成该令牌。您无法真正避免假客户端(看看专有软件/协议是如何进行反向工程的)

我有一个Java的客户机/服务器设置。客户端当前将计算值传输到服务器(除了登录/密码之外,还通过套接字)以进行身份验证

然而,目前没有任何东西可以阻止恶意反编译和重构的客户机连接,因为它只需要发送相同的身份验证数据


鉴于反编译揭示了我的客户机正在做的一切,真的有什么方法可以合理地阻止来自修改过的客户机的连接吗?在我看来,实现这一点的唯一方法是生成一个唯一的令牌,而经过修改的客户端(具有相同的令牌生成逻辑)在某种程度上无法生成该令牌。

您无法真正避免假客户端(看看专有软件/协议是如何进行反向工程的),但是这没有问题,因为你应该永远不要信任客户:检查他提出的每一个请求,这样他就不会引起问题。如果你这样做,即使是一个假客户也必须遵守你的规则,根本不会成为问题


无论如何,另一种方法是使你使用的协议变得模糊,这样它就不容易被反编译,协议也不可能被反向工程,但是你会惊讶于某些人能够破坏你的行为。让你的代码变得晦涩难懂很少是一个好处,而且会让你在大部分时间里浪费时间。

SO俱乐部的规则1:永远不要相信客户“它需要做的只是发送相同的身份验证数据”——但它怎么知道用户名和密码呢?或者那些硬编码也在客户端软件中?@Arjan注册帐户是免费的,因此用户名和密码不受严格控制/颁发。您描述了消息身份验证代码。但是,@Marcus,如何在应用程序中隐藏MAC的密钥?理想情况下是的,但是,有太多可能的命令/行为交互,因此在服务器端对所有请求进行监控要比混淆工作耗时得多。目前,只有最关键和最明显的行为才会被合法性审查。我不知道您想要开发哪种服务器,但通常这不是问题