我用eclipse做了一个游戏。我有一个服务器程序和一个客户端程序。客户端使用套接字与服务器通信。如果客户端启动,它会将其用户名和密码发送到服务器。如果组合存在,则客户端可以与服务器通信。并且客户端不断的读取游戏中其他人的等级,不断的发送自己的等级。
我的问题:我怎样才能保护密码或者它已经安全了?客户端是否可以不只是制作自己的 java 程序并使用现有的用户名和密码与服务器通信,而不是发送例如他是 100 级以上的信息。如果是的话如何解决这个问题?我还需要确保其他任何东西吗?
保持服务器程序中的敏感状态,并让客户端请求当前值。然后你在服务器上控制它。
如果某人拥有有效的凭据,那么他们就可以执行您的协议允许用户在其上下文中执行的任何操作。这是您必须从服务器程序控制的内容,以防止客户端的意外操作影响整体完整性。
如果是服务器驱动的多人游戏,您可以设计客户端应用程序以请求服务器发回服务器唯一可解密的关卡密钥和客户端可读的关卡编号或密钥。并且在下一个级别更改请求中,使客户端发送先前接收到的级别密钥(即当前)和任何其他所需的参数,以识别客户端的会话状态。
使用这种服务器唯一可解密的关卡密钥,客户端无法修改它并请求在游戏关卡中跳转。反过来,服务器会将下一级密钥和其他相关信息发送回客户端以继续。
虽然可能存在许多活动的客户端会话,但为了验证和验证它们,服务器上应该存在这样的服务。
...我可以知道客户端程序是否是我制作的原始程序吗?
不,您不能……除非您控制安装和运行客户端程序的执行平台。
但是,如果您采用 Pekka 推荐的方法,那就没关系了。具体来说,如果重要状态和在该状态上执行的操作由服务器端处理,那么您可以以这样一种方式实现它,即用户是否入侵客户端并不重要。
但实际上,许多游戏的交互性取决于状态和 UI 之间的快速交互。除非您可以缓解这种情况,否则将状态放在另一个系统上会导致“滞后”问题。