【发布时间】:2012-08-14 14:30:46
【问题描述】:
我正在编写一个 Android 应用程序并想定义房间。房间将容纳某些游戏的所有用户。这就像扑克有 4 个玩家,每个房间可以容纳 4 个用户。我还想使用 rabbitmq 来实现可扩展性和可定制性。问题是 Android 应用程序使用相同的用户名:密码将所有用户连接到 RabbitMQ 服务器(特定虚拟主机)。
我想我担心一个用户可能能够读取/写入来自不同队列的消息,这是应该的。有多种解决方案不满意:
在每个 Android 应用程序中使用不同的用户:这确实无法做到,因为 Android Market 不允许每个下载它的用户使用不同的应用程序。就算是这样,那也是个愚蠢的主意。
设置适当的访问控制:http://www.rabbitmq.com/access-control.html。我想这不会阻止恶意攻击者从/向它无权访问的队列读取/写入消息的问题。
设置适当的路由键:我猜如果每个用户创建另一个队列,它可以从中读取消息并将消息发布到特定定义的队列,这可以工作。但我猜问题是一样的,因为用户将使用相同的 username:password: 连接到 RabbitMQ,因此该用户可以读取所有队列并写入它们(基于访问规则)。
我的问题是:如何允许攻击者读取/写入仅代表他当前加入的房间的队列,并阻止访问其他队列?
【问题讨论】:
-
您可以通过为每个客户端创建一个队列来使用 rmq 模拟 pub/sub,并且他们可以通过该队列接收实时事件。在您的情况下,每个表都可能是一个非持久的扇出交换,每次服务器决定传播移动时,每个客户端都会接收服务器发送的游戏状态。然后您的游戏服务器将只知道交换(表)并从中发送/接收事件。如果你每桌有 4 个人和 2500 次交易,那已经是一个大型游戏服务器了。
标签: python security webserver messaging rabbitmq