【问题标题】:restricting access to user uploaded files in nodejs?限制对nodejs中用户上传文件的访问?
【发布时间】:2016-03-20 17:24:27
【问题描述】:

我正在创建一个允许用户上传文件(图片、声音...)的 Node.js/Express 应用程序,但我不希望用户只输入文件 URL 并访问它,我想确认一下用户身份以及用户是否是该文件的所有者,我对如何操作有一些想法

  • 通过添加 UUID 或类似的东西(但并不能真正解决问题)使文件名不可预测,只会让用户更难猜测文件路径。
  • 将文件保存在数据库行中,但从我读到的内容来看,这并不是最好的主意。
  • 创建一个单独的服务器,在发送文件或将功能添加到我的 API 服务器之前确认用户身份和文件所有者。

那么您认为最好的选择是什么,或者您有更好的想法以及 Facebook 等大人物是如何做到的?

【问题讨论】:

  • 我认为至少您需要在数据库或任何持久存储的表中维护 对。您实际上不必将文件内容存储在数据库中,任何文件系统都应该没问题。然后根据文件所有者信息,就可以维护一个基本的ACL

标签: node.js file security server


【解决方案1】:

您没有提及您使用的数据库。如果您使用的是 mongodb,则可以使用其 GFS(网格文件系统)功能来存储文件。当您存储文件时,您还可以添加元数据,在您的情况下,它将是用户 ID 或用户的数据库记录 ID,以便您可以查询。

【讨论】:

    【解决方案2】:

    使用 UUID,但不要只是将文件作为静态资源提供。它们仍应位于身份验证功能的后面。 将拥有该文件的用户的 UUID 保存在数据库中。 身份验证功能然后检查请求的 UUID 是否属于登录用户。

    类似这样的:

    app.use('/uploads/:uuid', authImage, express.static('uploads'));
    function authImage(req, res, next){
        if(req.user.images.contains(req.params.uuid))
            next();
        else
            res.status(403).send('Forbidden');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2010-11-08
      • 2012-06-12
      • 2017-05-03
      • 2019-07-10
      相关资源
      最近更新 更多