2011-06-23 110 views
0

我正在研究一種工具,最終將允許用戶從網上購買和下載文件。我想知道如何安全/安全地託管可下載文件,以便未經授權的用戶無需先購買即可下載文件。安全存儲可下載文件

用戶可以從網站上購買該文件,然後只要他們需要就可以訪問可下載文件。

這是一個問題的兩個部分:

  1. 我該如何去確保支付的文件不被未授權的人下載?和
  2. 我應該如何處理身份驗證,如果用戶檢查可以下載付費文件?

對於第一個問題,我猜測我將文件存儲在哈希目錄名稱中,以便猜測幾乎不可能? S3服務器會是一個很好的解決方案嗎?在這方面我需要注意哪些問題?

對於第二個問題,我猜,我可以在存儲了用戶的文件時,關聯像這樣購買的數據庫中創建表:

purchases table 
    -> id 
    -> hash (unique purchase identifier) 
    -> user (foreign key) 
    -> file (foreign key) 
    -> ...other stuff here like timestamp, etc... 

...,然後使用應用程序檢查用戶做出購買,這樣的URL下載將是:

http://www.example.com/something/download/sd9f7u23ihosd8087603/

...那麼這將搜索具有散列sd9f7u23ihosd8087603記錄,並確保它存在,它是相關的與當前用戶編輯。然後從那裏,將它們引導到文件系統上的文件...

這是一個好方法嗎?有沒有優越的解決方案?我敢肯定我在這裏缺少細節...


該應用程序是用Django編寫的,如果這對該問題有任何影響。另外需要注意的是,網站上將提供免費和付費下載。

注:這個問題是類似於我問:Having Django serve downloadable files

回答

-1

該怎麼辦......

1)存儲在某個目錄不是直接由Apache的訪問的文件。

2)在你的「購買一個文件」視圖中創建一個用戶特定的符號鏈接(使用散列)指向實際的文件並重定向到允許Apache以通過符號鏈接

3提供服務​​的文件)運行cron作業,在創建x個小時後刪除符號鏈接。

+0

我不使用Apache,但NGINX,上述仍然適用? –

+0

另外,似乎像符號鏈接是一個有點哈克...有更多的「標準」的方法呢? –