2012-09-01 73 views
2

正如您在此處看到的: https://github.com/visionmedia/express/blob/master/examples/multipart/index.js 默認快速支持文件上傳,並將每個上傳的文件存儲在臨時文件夾中供以後使用。如何在node.js和express 3.0服務器上控制文件上傳

我的問題是:安全嗎?

正如我所看到的,攻擊者可以使用垃圾文件填充所有臨時文件夾,而無需對其進行任何控制。 我應該檢查每個POST請求並刪除任何未使用的文件嗎?

+0

這裏是一個可以提供答案的一個類似的問題:http://stackoverflow.com/questions/11295554/how-to-disable-express-bodyparser-for-file-uploads-node-js –

+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 
    } 
    
相關問題