java - 如何确保只有我的原始客户端用于向我的服务器发出请求?

标签 java c++ c

我正在编写一个简单的在线多人游戏。它涉及向我的服务器发送一些 http 请求(不过我不介意使用任何其他 protcool)以存储有关游戏的统计信息。

问题是游戏是 P2P 的,然后统计数据被发送到我的服务器,所以这使得通过发送虚假统计数据作弊成为可能。我意识到不可能让它不受欺骗客户的影响,那么什么是将这种情况发生的可能性降到最低的好方法呢?在服务器和客户端之间协商唯一的安全 key 以确保请求是真实的?

我知道几乎每个专有协议(protocol)迟早都会被逆向工程,但我认为如果我让生成 key 稍微耗费一些时间,那么在愚蠢的游戏上作弊是不值得的。

或者有更好的方法吗?

最佳答案

这完全取决于统计数据的类型。如果每个客户端都可以提交关于其他客户端的部分统计信息,并为自己提交完整的统计信息,您可以编写一个服务器端验证机制来检测差异 - 这需要多个客户端的协调努力才能通过。

当你设计这样的机制时,你应该假设作弊者可以完全访问客户端服务器的源代码 - 并制定一个仍然不能的机制被一个骗子绕过。如果生成的机制不可用(通常是由于效率),您可以开始以安全换取效率——但要注意您的交易是什么,以及作弊者可以使用哪些方法。尝试记录足够的数据,以便您可以通过对日志的非实时分析来检测此类作弊,之后捕获作弊者是仅次于在 中捕获他的最佳选择行动。

关于java - 如何确保只有我的原始客户端用于向我的服务器发出请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645386/

相关文章:

java - JTable 面板中显示白框,原因不明

java - 程序允许您在N维空间中指定点

c++ - 在 Visual Studio 中提升测试

c - fork() 后子进程的独立 I/O

c++ - C 标准 : Character set and string encoding specification

java - 如何检查文件是否为excel文件?

c++ - 浏览器选项卡为每个选项卡创建我的边栏的多个实例;我只想要一个侧边栏

c++ - 使用数组的文件输出不正确

c - scanf ("%d", &num) 的状态为 0 或 1

java - eclipse java声明快捷方式是什么?