上传图片的 Meteor 安全权限
Meteor Security Permissions on Uploaded Images
我正在创建一个 Meteor 聊天应用程序。我希望用户能够相互发送图像,但不在 group/conversation 中的用户应该看不到图像。我的第一个想法是给图像一个唯一的 ID,并将带有此 ID 的图像存储在我或第三方服务器的 public 文件夹中。
例如,如果用户上传一张名为“name.jpg”的图片,它可能会以 A3eedAcRCqCa32451.jpg 的形式存储在 Amazon S3 中。这样,任何拥有 ID 的人都可以访问该图像,但唯一可以访问该 ID 的人将是群聊中的人,因为我可以使用 Meteor 的发布和订阅规则确保安全访问。但是,这对我来说并不安全。我的直觉是对的吗?
如果是,我还能怎么做?我在网上和 Whosebug 上进行了搜索,但找不到另一种简单的方法来实现这一目标。
这取决于您想要的安全级别...
更安全的解决方案是将可以访问图像的 imageId
和 userId
人存储在一个集合中。当有人想要访问它时,你只需要检查他是否在允许的用户列表中。
然后正如您所说,您可以使用第 3 方存储(我个人使用 ostrio:files with Dropbox integration, the docs about it aren't up to date but I made a pull request which was accepted on the dev branch with a working example, you can take a look at it here。)
ostrio:files
的好处是它提供了像 onAfterUpload
或 interceptDownload
这样的内置函数,您可以在其中存储有关第一个访问权限的数据并检查访问权限是否可用允许第二次。
在考虑授予对资源的访问权限时,您通常可以做两件事:
- 身份验证和访问控制
- 具有足够熵的间接对象引用使暴力攻击毫无希望。
点 1 或多或少是显而易见的。
第 2 点实际上是您已经想到的。为了推断第二种方法的安全性,让我们考虑以下几点:
A3eedAcRCqCa32451
.jpg 的熵约为 80 位
- 域的计数是 2^80 = 1208925819614629174706176。
- 攻击者可以尝试猜测秘密。
- 假设他每秒可以猜 10 次,平均他会在 |domain|/2 次尝试后猜中。
- 攻击者需要大约 200 万年才能猜到。
现在80位的域从安全的角度来说有点小了。使用类型 4 UUID 使其成为 128 位。我相信你知道这是怎么回事。
我正在创建一个 Meteor 聊天应用程序。我希望用户能够相互发送图像,但不在 group/conversation 中的用户应该看不到图像。我的第一个想法是给图像一个唯一的 ID,并将带有此 ID 的图像存储在我或第三方服务器的 public 文件夹中。
例如,如果用户上传一张名为“name.jpg”的图片,它可能会以 A3eedAcRCqCa32451.jpg 的形式存储在 Amazon S3 中。这样,任何拥有 ID 的人都可以访问该图像,但唯一可以访问该 ID 的人将是群聊中的人,因为我可以使用 Meteor 的发布和订阅规则确保安全访问。但是,这对我来说并不安全。我的直觉是对的吗?
如果是,我还能怎么做?我在网上和 Whosebug 上进行了搜索,但找不到另一种简单的方法来实现这一目标。
这取决于您想要的安全级别...
更安全的解决方案是将可以访问图像的 imageId
和 userId
人存储在一个集合中。当有人想要访问它时,你只需要检查他是否在允许的用户列表中。
然后正如您所说,您可以使用第 3 方存储(我个人使用 ostrio:files with Dropbox integration, the docs about it aren't up to date but I made a pull request which was accepted on the dev branch with a working example, you can take a look at it here。)
ostrio:files
的好处是它提供了像 onAfterUpload
或 interceptDownload
这样的内置函数,您可以在其中存储有关第一个访问权限的数据并检查访问权限是否可用允许第二次。
在考虑授予对资源的访问权限时,您通常可以做两件事:
- 身份验证和访问控制
- 具有足够熵的间接对象引用使暴力攻击毫无希望。
点 1 或多或少是显而易见的。 第 2 点实际上是您已经想到的。为了推断第二种方法的安全性,让我们考虑以下几点:
A3eedAcRCqCa32451
.jpg 的熵约为 80 位- 域的计数是 2^80 = 1208925819614629174706176。
- 攻击者可以尝试猜测秘密。
- 假设他每秒可以猜 10 次,平均他会在 |domain|/2 次尝试后猜中。
- 攻击者需要大约 200 万年才能猜到。
现在80位的域从安全的角度来说有点小了。使用类型 4 UUID 使其成为 128 位。我相信你知道这是怎么回事。