限制访问nodejs中用户上传的文件?

时间:2015-12-15 03:03:05

标签: node.js file security server

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

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

那么你认为什么是最好的选择,或者你有更好的想法,像Facebook那样的大镜头是怎么做的?

2 个答案:

答案 0 :(得分:1)

使用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');
}

答案 1 :(得分:0)

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