Java 获得多人游戏的良好安全性

Java 获得多人游戏的良好安全性,java,security,sockets,Java,Security,Sockets,我用eclipse做了一个游戏。我有一个服务器程序和一个客户端程序。客户端使用套接字与服务器通信。如果客户端启动,它会将其用户名和密码发送到服务器。如果存在组合,则客户端可以与服务器通信。客户端不断读取游戏中其他人的等级,并不断发送自己的等级 我的问题是: 我如何保护密码或密码已经安全? 客户机不仅可以自己编写java程序,使用现有的用户名和密码与服务器进行通信,还可以发送(例如)他已达到100级。如果是,如何解决? 是否还有其他需要保护的内容?在服务器程序中保留敏感状态,并让客户端请求当前值。

我用eclipse做了一个游戏。我有一个服务器程序和一个客户端程序。客户端使用套接字与服务器通信。如果客户端启动,它会将其用户名和密码发送到服务器。如果存在组合,则客户端可以与服务器通信。客户端不断读取游戏中其他人的等级,并不断发送自己的等级

我的问题是: 我如何保护密码或密码已经安全? 客户机不仅可以自己编写java程序,使用现有的用户名和密码与服务器进行通信,还可以发送(例如)他已达到100级。如果是,如何解决?
是否还有其他需要保护的内容?

在服务器程序中保留敏感状态,并让客户端请求当前值。然后在服务器上控制它


如果有人拥有有效的凭据,那么他们就能够执行您的协议允许用户在其上下文中执行的任何操作。这是您必须从服务器程序控制的内容,以防止客户端的意外操作影响整体完整性。

将敏感状态保留在服务器程序中,并让客户端请求当前值。然后在服务器上控制它

如果有人拥有有效的凭据,那么他们就能够执行您的协议允许用户在其上下文中执行的任何操作。这是您必须从服务器程序控制的内容,以防止客户端的意外操作影响整体完整性

。。。我能知道客户端程序是否是我制作的原始程序吗

不,你不能。。。除非您控制安装和运行客户端程序的执行平台

但如果你采用Pekka推荐的方法,那没关系。具体来说,如果重要状态和在该状态下执行的操作由服务器端处理,那么您可以以这样一种方式来实现它,即用户是否入侵了客户端并不重要

但实际上,许多游戏的交互性取决于状态和UI之间的快速交互。将状态放在另一个系统上会导致“滞后”问题,除非您可以缓解这种情况

。。。我能知道客户端程序是否是我制作的原始程序吗

不,你不能。。。除非您控制安装和运行客户端程序的执行平台

但如果你采用Pekka推荐的方法,那没关系。具体来说,如果重要状态和在该状态下执行的操作由服务器端处理,那么您可以以这样一种方式来实现它,即用户是否入侵了客户端并不重要


但实际上,许多游戏的交互性取决于状态和UI之间的快速交互。将状态放在另一个系统上会导致“延迟”问题,除非您可以缓解此问题。

如果是服务器驱动的多人游戏,您可以设计客户端应用程序,请求服务器发回仅服务器可解密的级别密钥和客户端可读取的级别号或密钥。在下一个级别的更改请求中,让客户机发送先前接收到的级别密钥(即当前)和识别客户机会话状态所需的任何其他参数

使用这样的服务器只能解密级别密钥,客户端不能修改它,也不能在游戏级别上跳转请求。 服务器依次将下一级密钥和其他相关信息发送回客户端以继续


虽然可能存在许多活动客户端会话,但要验证和验证它们,服务器上应该存在此类服务。

如果是服务器驱动的多人游戏,您可以设计客户端应用程序,请求服务器发回仅服务器可解密的级别密钥和客户端可读取的级别号或密钥。在下一个级别的更改请求中,让客户机发送先前接收到的级别密钥(即当前)和识别客户机会话状态所需的任何其他参数

使用这样的服务器只能解密级别密钥,客户端不能修改它,也不能在游戏级别上跳转请求。 服务器依次将下一级密钥和其他相关信息发送回客户端以继续


虽然可能存在许多活动客户端会话,但要验证和验证它们,服务器上应该存在此类服务。

好的,我可以知道客户端程序是否是我制作的原始程序吗?您需要为此引入一些加密握手。例如,当客户端第一次连接时,可以传回绑定到客户端计算机的唯一哈希。使用它来验证应用程序。好的,我可以知道客户端程序是否是我制作的原始程序吗?您需要为此引入一些加密握手。例如,当客户端第一次连接时,可以传回绑定到客户端计算机的唯一哈希。Yhen用它来验证应用程序。所以你的意思是,所有需要对游戏中每个人进行的计算都需要在服务器上完成。我想如果我想这样做,我需要一台巨大的服务器吗?@emilio5-你不需要在服务器上做所有的计算。只有从公平竞争的角度来看才重要。但是是的:如果你想100%保证人们不会通过客户端黑客来作弊,那么运行游戏的成本将是更多的服务器端资源。@emilio5-如果你有多个并发玩家,并且每个玩家都可以总结其他玩家的计算结果,然后,服务器采用一种更简单的投票方式,允许它批准单个更新。通过这种方式,对等玩家将执行验证,并且只有当所有玩家都被颠覆时才会出现问题。因此,您所说的是,需要为游戏中的每个人进行的所有计算都需要在服务器上完成。我想如果我想那样做的话