【问题标题】:Protecting the AWS S3 download links保护 AWS S3 下载链接
【发布时间】:2020-06-12 00:56:31
【问题描述】:

我一直在开发一个网站,人们可以在其中购买数字产品,然后在付款后下载它们。我正在使用 MERN 堆栈并考虑使用 AWS S3 来存储数字产品。

我很担心实施安全性。我想确保除非他们购买了产品,否则没有人可以找到下载文件的邪恶方法。

不仅关于 AWS S3,而且您可以提出任何建议。

因为我是一名机械工程师,所以我在这个行业并不是一个真正有经验的人。所以,我很感激你的一点建议。

【问题讨论】:

    标签: node.js reactjs mongodb express amazon-s3


    【解决方案1】:

    你应该使用Amazon S3 pre-signed URLs

    它是这样工作的:

    • Amazon S3 中的所有文件都保持私有
    • 用户与您的网站互动并购买软件
    • 然后您的网站生成一个预签名 URL,这是一个指向存储在 Amazon S3 中的私有对象的限时链接
    • 用户可以点击该链接下载文件。过期时间(您可以设置)后,链接将不再有效。

    是的,他们可以与其他人共享该链接,但它仅在规定的时间段内有效(例如 5 分钟)。

    签名 URL 只需几行代码即可生成。它可以在您的应用中生成,而无需对 S3 进行 API 调用。

    【讨论】:

    • 谢谢您的回答先生,我还有几个问题要问。我正在开发的应用程序允许所有注册用户共享他们的付费/免费数字产品,并且会有很多下载请求到服务器。随着用户数量的日益增长,将会有大量的负载。所以问题是,您的解决方案在这种情况下仍然可行吗?
    • 另一件事是,我是否必须创建 2 个存储桶,一个用于付费产品,一个用于免费产品?如果是这样,免费产品的存储桶也应该是私有的吗?但请记住,用户可以将他们的产品从付费切换为免费,反之亦然。
    • Amazon S3 非常适合大容量。预签名 URL 的好处是您的应用程序不需要做太多工作,因为 S3 会为您提供所有文件!它是高度可扩展的,可以轻松处理高负载。
    • 您如何对免费产品和付费产品的行为差异进行分类?如果“免费”产品意味着任何人都可以随时访问它们,那么将它们放在不需要身份验证的公共存储桶中是有意义的。但是,如果他们应该始终通过您的应用访问文件,那么您应该使用预签名 URL 进行 all 下载。这允许您的应用程序确定允许或不允许下载哪些内容。这类似于出售音乐会门票——您的应用只需担心出售“门票”,而 S3 运行音乐会。
    • 我开悟了。看来我要为所有产品选择单一存储桶,只让注册用户下载付费/免费产品,很高兴知道它是可扩展的。谢谢楼主!
    猜你喜欢
    • 2012-04-13
    • 2023-03-25
    • 2011-10-11
    • 2021-04-19
    • 2017-11-14
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多