如何在node.js中控制文件上传;快递3.0服务器

时间:2012-09-01 19:19:45

标签: node.js file-upload express

正如你在这里看到的: https://github.com/visionmedia/express/blob/master/examples/multipart/index.js 默认情况下快速支持文件上传,并将每个上传的文件存储在临时文件夹中供以后使用。

我的问题是:安全吗?

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

1 个答案:

答案 0 :(得分:1)

让我为你的问题提出两个解决方案。

  1. 使用虚拟驱动器上传您的上传位置。如果您的服务器在linux上运行,则很容易安装仅在内存中的虚拟文件系统。文件将放在这里比在真正的硬盘驱动器上更快,如果你遇到类似你描述的问题,只需要清理虚拟驱动器或重新启动服务器。 Look at this article for an explaination of ram disks
  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
    }