2011-02-27 34 views
2

我正在構建一個具有文件上傳功能的Rails應用程序,只有經過身份驗證的用戶才能上傳文件。文件上傳表單位於僅限會員區域,但由於抓取上傳URL並嘗試從腳本發佈數據非常容易,所以我擔心未經身份驗證的文件上載提交。確保上傳將被拒絕,但只有在數據傳輸完成並且浪費了寶貴的帶寬之後。如何在整個表單提交到我的服務器之前拒絕未經身份驗證的文件上傳?由於我無法使用腳本或CURL控制用戶,因此需要某種服務器端解決方案。我很欣賞任何反饋。謝謝。如何在數據傳輸完成之前拒絕文件上傳?

+0

也許有一個的before_filter確保需要登錄上傳文件? – Shreyas 2011-02-27 17:52:49

回答

0

這是在執行該操作之前,你可以做..時,執行的before_filter什麼(upload_form_action被上傳表單頁面,upload_action在於臨危文件

allowed_to_upload應的頁面簡單的僞代碼被幫手/功能/等,返回真/假,如果是假的,它會呈現403未經授權,否則將只是吝嗇。

before_filter :check_upload, :only => [:upload_form_action, :upload_action] 

protected 
    def check_upload 
    render :nothing, :status => 403 and return unless allowed_to_upload 
    end 
+0

我目前有一個類似的before_filter設置來檢查用戶是否登錄。如果用戶沒有登錄,那麼它只是重定向用戶。我試過你的代碼,但是認證總是在文件完全上傳後進行。想象一下,一個聰明的用戶從html源代碼(包括真實性令牌和所有)抓取表單並使用它來嘗試上傳文件(不包含包含認證信息的cookie)。認證before_filter會拒絕文件的進一步處理,因爲用戶沒有登錄但沒有實際上傳 – SimKo 2011-02-28 03:23:35

+0

問題在於Rails在完成(即上傳完成時)之前不處理該請求。不過,我懷疑你可以發送1GB的上傳請求到任何頁面,你不能做太多的事情。我需要看看這個 – nvez 2011-02-28 18:08:37

+0

是的,我有一個暗示,這可能是這樣的。真正需要的是在文件上傳完成之前檢查cookie,然後終止上傳。我想知道是否有可能在全部完成之前處理這篇文章。 Cookies是在表單數據之前發送的,因此可能有機會檢查帖子,看看在表單數據流式傳輸到服務器時是否存在帶有認證數據的cookie。也許有一些Rack定製?我不知道在交付它之前,Web服務器是否緩衝了整個帖子。 – SimKo 2011-02-28 21:11:31

相關問題