node.js - 上传图像的 Meteor 安全权限

标签 node.js security meteor file-upload

我正在创建一个 Meteor 聊天应用程序。我希望用户能够互相发送图像,但不在组/对话中的用户不应该能够看到图像。我的第一个想法是为图像提供唯一的 ID,并将具有此 ID 的图像存储在我或第三方服务器的公共(public)文件夹中。

例如,如果用户上传名为“name.jpg”的图像,则该图像可能会在 Amazon S3 中存储为 A3eedAcRCqCa32451.jpg。这样,任何拥有该 ID 的人都可以访问该图像,但唯一有权访问该 ID 的人是群聊中的人,因为我可以使用 Meteor 的发布和订阅规则确保安全访问。然而,这对我来说并不安全。我的直觉对吗?

如果是的话,我还能怎么做?我在网上和 StackOverflow 上进行了搜索,但找不到另一种简单的方法来实现此目的。

最佳答案

在考虑授予资源访问权限时,您通常可以做两件事:

  1. 身份验证和访问控制
  2. 间接对象引用具有足够的熵,使暴力攻击毫无希望。

第 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/

相关文章:

javascript - Node crypto-js AES 加密 -> 解密用法?

asp.net - 保护 ASP.NET Web 目录中的文件夹

meteor :如何渲染换行符?

facebook - 我如何重新配置​​ Meteor 的 accounts-facebook,或者 Meteor 的 Facebook 配置在哪里?

node.js - NodeJS 和 Socket.io

javascript - 无法使用请求登录环回 API

mysql - 无法删除 UPDATE 查询中的 SQL 语法

c# - 将 SetSystemTime 与受限用户帐户一起使用

linux - 如何保护 drupal 文件的权限?

javascript - Meteor Random 包 vs randomSeed