我正在创建一个 Meteor 聊天应用程序。我希望用户能够互相发送图像,但不在组/对话中的用户不应该能够看到图像。我的第一个想法是为图像提供唯一的 ID,并将具有此 ID 的图像存储在我或第三方服务器的公共(public)文件夹中。
例如,如果用户上传名为“name.jpg”的图像,则该图像可能会在 Amazon S3 中存储为 A3eedAcRCqCa32451.jpg。这样,任何拥有该 ID 的人都可以访问该图像,但唯一有权访问该 ID 的人是群聊中的人,因为我可以使用 Meteor 的发布和订阅规则确保安全访问。然而,这对我来说并不安全。我的直觉对吗?
如果是的话,我还能怎么做?我在网上和 StackOverflow 上进行了搜索,但找不到另一种简单的方法来实现此目的。
最佳答案
在考虑授予资源访问权限时,您通常可以做两件事:
- 身份验证和访问控制
- 间接对象引用具有足够的熵,使暴力攻击毫无希望。
第 1 点或多或少是显而易见的。 第2点实际上是你已经想到的。为了推断第二种方法的安全性,我们考虑以下因素:
A3eedAcRCqCa32451
.jpg 的熵约为 80 位。- 域的计数为 2^80 = 1208925819614629174706176。
- 攻击者可以尝试猜测 secret 。
- 假设他每秒可以进行 10 次猜测,平均而言,他会在 |domain|/2 次尝试后猜出。
- 攻击者需要大约 200 万年才能猜测。
现在从安全角度来看,80 位的域有点小。使用类型 4 UUID 将其设为 128 位。我相信您知道这是怎么回事。
关于node.js - 上传图像的 Meteor 安全权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62976015/