2010-03-21 49 views
2

我有一個員工可以上傳文件的系統。有三種方式通過Web保護文件:基於細粒度授權的文件訪問

上傳到我的帳戶在公共,私人或保護模式
上傳到部帳戶在公共,私人或保護模式
上傳到組織帳戶公共,私人或保護模式

哪裏公衆對任何人都是公開的,只對組織或個人是私人的,並且對組織中的任何人都有保護。

所有對一個組織的文件存儲在一個目錄,那麼/文件/ <organizationId> /,文件服務器上 像

文件
+ - 234809
| + img1.jpg
| + doc1.pdf
+ - 808234
| + doc2.pdf

我在DB中存儲文件路徑和隱私級別。所以,我可以控制是否在給定頁面上顯示鏈接到用戶的文件URL。

問題是,我沒有任何控制文件的URL ...所以,如果有人在他的瀏覽器的地址欄中鍵入img1.jpg的URL,則無法知道登錄用戶是否有資格看到img1.jpg。

有什麼建議嗎?


它是一個Java應用程序。但是,Glassfish有一個獨立的實例作爲文件服務器。由於該應用尚未發佈,因此我們願意採用更好的文件訪問策略。

正在訪問文件的用戶可能會也可能不會登錄。但是,如果我們知道正在訪問的文件是私人文件或共享文件,我們可以通過重定向到登錄頁面來對用戶進行身份驗證。

感謝
NISHANT

回答

1

您提出一個有趣的問題,你的問題的理解是正確的。

根據提供內容的IIS版本,如果內容位於vdir內,則甚至可能無法訪問控制權。

這種類型的場景的典型解決方案是將文件存儲在Internet不可訪問的目錄中,並使用受保護的HttpHandler並將文件流式傳輸出去。

有幾種方法可以解決這個問題,最簡單的方法是將HttpHandler映射到不存在的目錄(例如/ downloads),並將文件名解析爲RequestUri,設置正確的內容類型並將文件寫入Response。

在這種情況下,您的HttpHandler受到保護,您可以確定訪問權限。

+0

是的,這是整潔。在這種方法中,URL可能具有文件的上下文。像http://abc.com/downloads/[some-encrypted-key]/img1.jpg,HTTP處理程序將根據用戶憑證和密鑰的必需許可推斷出可訪問性。但是機器人仍然可以繼續嘗試並訪問它,儘管可能性很低。 最近我在想什麼,也許我可以有一個元數據文件附加到每個文件像img1.jpg有一個文件img1.md,當用戶訪問該文件處理程序讀取元數據和驗證。但是,在帶有100個文件的頁面上閱讀文件可能會很痛苦。 – Nishant 2010-03-22 19:07:29

+0

@Nishant - 在您的問題中澄清您正在使用的平臺,以及將訪問「下載」的用戶是否通過登錄身份進行身份驗證,然後我們可以從那裏進行身份驗證。 – 2010-03-22 19:34:48

+0

它是一個Java應用程序。但是,Glassfish有一個獨立的實例作爲文件服務器。由於該應用尚未發佈,因此我們願意採用更好的文件訪問策略。 正在訪問這些文件的用戶可能會也可能不會登錄。但是,如果我們知道正在訪問的文件是私人文件或共享文件,我們總是可以通過重定向到登錄頁面來對用戶進行身份驗證。 – Nishant 2010-03-22 20:36:25

0

您可以將文件存儲在公用文件夾之外,並具有某種路由以捕獲任何正在向組織請求文件的URL。然後,您可以通過編程方式提供文件,而不是讓您的Web服務器在沒有任何控制的情況下執行該操作。

+0

是的,這就是我們最終做的。 – Nishant 2010-08-24 20:57:38