【问题标题】:Is it secure to use UDP socket communication for a game?在游戏中使用 UDP 套接字通信是否安全?
【发布时间】:2023-03-23 12:06:01
【问题描述】:

我正在使用 Unity 开发一款多人安卓游戏。对于服务器端,我使用 python。没有登录系统或用户名。基本上,有一个配对系统和房间。我将包含房间密钥、用户位置等的 JSON 对象从客户端发送到服务器。房间钥匙是唯一的 10 位十六进制数字。我使用 UDP 套接字进行通信。

  1. 仅使用 UDP 套接字进行游戏是否安全?客户已经拥有源代码并且可以轻松更改它。所以他们可以改变从客户端到服务器的数据。我是否需要实施一种算法以更安全地免受黑客攻击或作弊?任何人都可以更改 apk 文件并破坏此游戏中的所有内容吗?
  2. 我可以为 TCP 和 UDP 连接使用一个端口(例如 8000),其中 TCP 接受用户/玩家进行匹配并创建一个唯一的房间密钥以在服务器准备好时发送客户端?客户端获得密钥后,服务器将决定哪个用户在哪个房间使用该房间密钥​​或使用 UDP,即使在匹配时也是如此。这种方法会使服务器变慢吗?

【问题讨论】:

  • 这个问题真的应该是两个不同的问题。我正在编辑您的帖子以删除第二个帖子。
  • @Ruzihm,对不起,我恢复了第二个问题,因为它已被回答。

标签: android sockets unity3d server udp


【解决方案1】:

1- 仅使用 udp 套接字进行游戏是否安全。客户已经有源代码并且可以很容易地改变它。所以他们可以改变从客户端到服务器的数据。我是否需要实施一种算法来更安全地免受黑客攻击或作弊?任何人都可以更改apk文件并破坏这个游戏中的一切吗?

默认情况下,UDP 本身并没有给你任何依赖,所以如果你使用 UDP 并且需要一些依赖或保证数据到达,你需要在你的协议中实现确认逻辑,这样可以避免数据包复制。

关于安全性,是的,您需要实现握手、压缩和加密逻辑,并且需要使用校验和算法来确保要解析的数据不会损坏。您还需要在客户端上实现一些内存管理逻辑,以使客户端和服务器之间的通信不易通过内存转储进行映射,以避免通过内存覆盖进行欺骗。

2- 我可以为 tcp 和 udp 连接使用一个端口(例如 8000),其中 tcp 接受用户/玩家进行匹配,并在服务器准备好时为发送的客户端创建一个唯一的房间密钥。客户端获得密钥后,服务器将决定哪个用户在哪个房间使用该房间密钥​​或使用 udp,即使在匹配时也是如此。这种方法是否会使服务器变慢?

您可以使用应在 1024-49151 范围内的用户端口。

大多数出色的游戏网络机制同时使用 TCP 和 UDP 以及一些节流技术来保持客户端和服务器之间的同步。这篇文章应该是您的好读物:

https://gafferongames.com/post/udp_vs_tcp/

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多