首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails Activestorage和S3,存储敏感数据

Rails Activestorage和S3,存储敏感数据
EN

Stack Overflow用户
提问于 2018-08-30 12:41:30
回答 3查看 1.7K关注 0票数 1

ActiveStorage使通过JS中的用户浏览器直接在S3上上传和访问文件成为可能。这是否意味着您的S3凭据嵌入到用户浏览器中?我想我误解了,这会让你的资历几乎公开.

在这种情况下,唯一阻止任何人访问其他用户数据的是唯一令牌生成。但是24字节的随机密钥很容易被强暴。我是否应该通过实现与自己数据相关的每个用户的唯一密钥来加强安全性?

什么是好的安全架构?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-30 13:37:25

一个很好的安全体系结构(也许这就是在ActiveStorage中实现的)是:

1-包括上传表格在内的网页被要求。

2-一个blob记录将在服务器端创建并持久化到数据库(甚至在任何上传发生之前)。存储/bob.rb#L70

3-服务器调用第三方云服务(AWS S3表示ex.)在后端,并使用AWS凭据(秘密凭据,不应公开)发出预先签名的url,用于上传。service.rb#L87

url

4-服务器呈现带有表单和嵌入presigned_url的页面。

5-此时的前端将在服务器上生成presigned_url并呈现到表单中。

Javascript将从html DOM中捕获这个presigned_url并使用它进行上传。

7-上传后,javascript将有signed_id,它将以表单形式发布到后端,以更新blob记录并将其标记为上载(step1中创建的blob记录)。

Pros

1-您不需要通过服务器上传任何文件,这意味着在上传过程中没有阻塞任何进程,并且使用客户端计算能力来处理这样简单的任务。

2-你可以上传,即使后端是下降。

3-更快的用户体验(减少往返旅行)。

Cons

1-临时令牌可以被任何访问它的人使用来上传。

2- presigned_url具有有效期(expires_at),如果浏览器在进行实际上传之前一直处于空闲状态,那么浏览器很可能会出现错误。它可能需要从服务器发出一个新的临时令牌!?

注意:

  • 生成的presigned_url可以基于经过身份验证的用户限制对特定文件夹/作用域的访问,或者如果上传的blobs是按业务需求公开的,则它们可以特权访问整个桶/无作用域。

这就是signed uploads的工作方式:)

票数 7
EN

Stack Overflow用户

发布于 2018-08-30 12:57:33

您的S3凭据应该保存为环境变量在您的回购,而不是硬编码。在Hartls图书Rails教程中有一个例子。

票数 0
EN

Stack Overflow用户

发布于 2018-08-30 13:24:22

当您将ActiveStorage与S3结合使用时。您需要将凭据存储在这样的环境变量中

您需要创建一个文件storage.yml

代码语言:javascript
复制
amazon:
  service: s3
  access_key_id: ENV["AWS_ACCESS_KEY_ID"]
  secret_access_key: ENV["AWS_SECRET_KEY"]
  region: ENV["AWS_REGION"]
  bucket: ENV["S3_BUCKET"]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52097364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档