我正在编写一个简单的在线多人游戏。它涉及向我的服务器发送一些 http 请求(不过我不介意使用任何其他 protcool)以存储有关游戏的统计信息。
问题是游戏是 P2P 的,然后统计数据被发送到我的服务器,所以这使得通过发送虚假统计数据作弊成为可能。我意识到不可能让它不受欺骗客户的影响,那么什么是将这种情况发生的可能性降到最低的好方法呢?在服务器和客户端之间协商唯一的安全 key 以确保请求是真实的?
我知道几乎每个专有协议(protocol)迟早都会被逆向工程,但我认为如果我让生成 key 稍微耗费一些时间,那么在愚蠢的游戏上作弊是不值得的。
或者有更好的方法吗?
最佳答案
这完全取决于统计数据的类型。如果每个客户端都可以提交关于其他客户端的部分统计信息,并为自己提交完整的统计信息,您可以编写一个服务器端验证机制来检测差异 - 这需要多个客户端的协调努力才能通过。
当你设计这样的机制时,你应该假设作弊者可以完全访问客户端和服务器的源代码 - 并制定一个仍然不能的机制被一个骗子绕过。如果生成的机制不可用(通常是由于效率),您可以开始以安全换取效率——但要注意您的交易是什么,以及作弊者可以使用哪些方法。尝试记录足够的数据,以便您可以通过对日志的非实时分析来检测此类作弊,之后捕获作弊者是仅次于在 中捕获他的最佳选择行动。
关于java - 如何确保只有我的原始客户端用于向我的服务器发出请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645386/