【问题标题】:Serve confident files in a RESTful API (Rails/Paperclip)在 RESTful API (Rails/Paperclip) 中提供可靠的文件
【发布时间】:2013-02-26 13:55:23
【问题描述】:

我希望我的用户能够上传一些与他们严格相关的文件。该资源只有在通过 Web 服务进行身份验证时才可见,文件附件也应该如此。

现在有了 Paperclip,我可以指定文件的上传位置,甚至可以像这样混淆文件名:

has_attached_file :avatar, {
    :url => "/system/:hash.:extension",
    :hash_secret => "longSecretString"
}

但是,所有文件仍然存储在同一个位置,并且通过暴力破解您可能会看到不属于您的文件,即使不太可能。

有什么方法可以保护文件不被不应该看到的人看到?

【问题讨论】:

  • 文件是否存储在 S3 上?
  • 我猜不是,应该很自信:自己的服务器。

标签: ruby-on-rails security rest paperclip


【解决方案1】:

对于这些对象的对象/模型级授权,请查看 ruby​​ 工具箱中的canablerails_authorization,以及以下问题:

如果您在使用 Paperclip 时遇到问题,可以查看 carrierwave 或 ruby​​ 工具箱中 rails_file_uploads 中的其他内容。 Carrierwave 支持文件系统、DB 中的存储或 DB 管理的文件系统存储(如 carrierwave-postgresql 中的大对象支持,如果您使用的是 postgres)。

【讨论】:

  • carrierwave 对于我们的目的来说似乎是一种更好的方法。我应该提到,我们已经使用 devise 作为身份验证库,因此使用它,我们需要一种结合carrierwave 的专用文件服务方法。非常感谢!
【解决方案2】:

您应该能够将回形针配置为将文件存储在应用程序的 /public 目录之外的某个位置,因此它们必须由您的应用程序获取和提供。如果您的应用程序必须获取它们,那么您可以在此时应用您需要的任何身份验证和授权。

另一种方法是将上传的文件存储在数据库中而不是文件系统中。这使得上传的文件与您存储在数据库中的任何其他应用程序数据一样安全。

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2013-09-04
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多