2

正如您在此处看到的: https ://github.com/visionmedia/express/blob/master/examples/multipart/index.js Express 默认支持文件上传,并将每个上传的文件存储在临时文件夹中以备后用。

我的问题是:它安全吗?

正如我所看到的,攻击者可以用垃圾文件填充所有临时文件夹,而对其没有任何控制。我应该检查每个 POST 请求并删除任何未使用的文件吗?

4

1 回答 1

1

让我为您的问题提出两种解决方案。

  1. 使用虚拟驱动器作为上传位置。如果您的服务器在 linux 上运行,则很容易挂载仅在内存中的虚拟文件系统。这些文件将比在真正的硬盘驱动器上更快地放置在此处,并且如果您遇到与您描述的问题类似的问题,只需清理虚拟驱动器或重新启动服务器即可。查看这篇文章以了解 ram 磁盘的说明
  2. 确保您在 24 小时内仅接受来自同一 IP 地址的最多 x 次上传。将此解决方案与解决方案 1 结合使用以获得最大效果。实现这一点的一种方法是为每个 IP 地址创建一个包含上传计数的全局对象,然后每 24 小时将其清除一次。

    var uploads = {}
    setInterval(function(){
     uploads = {}
    }, 24*60*60*1000); //Run every 24 hours
    
    var onUpload = function(request, file){
      if(uploads[req.ip] > maxUploadsAllowedPrUser)
        fs.unlink(file) //Delete the file
      else
        uploads[req.ip]++ //Keep the file, and increase count
    }
    
于 2013-03-07T21:26:16.170 回答