2010-10-05 151 views
2

我正在製作一個小型文件託管網站,每個用戶都可以上傳多個文件,並且只能訪問他的文件,並且無法訪問其他文件,例如通過猜測URL。
有沒有一種辦法,以確保文件有僅由業主和沒有身體其他接入「可能是網站管理員也將有機會獲得」如何防止其他用戶下載/打開其他文件?

更新,如果你能告訴我例如,代碼樣本或演示即會很棒。

回答

5

您需要將文件存儲在未由IIS提供的目錄中,然後創建一個腳本,該腳本獲取文件ID,驗證用戶是否有權訪問並返回文件的內容。

1

如果每個用戶都有自己的文件夾來上傳文件,那麼您可以使用web.config只允許驗證用戶訪問他們自己的文件夾。如果情況並非如此,那麼我想你需要在請求者和文件之間放置一個圖層(數據驅動),以便在提供文件之前驗證訪問權限。

2

這取決於這是Internet還是內部Intranet應用程序。如果它是內部的,並使用Windows身份驗證或活動目錄身份驗證,則可以使用基於文件的權限來保護文件。

如果它是一個外部的互聯網應用程序,那麼你將不得不開發一些邏輯來保護你的文件。假設您的身份驗證非常強大 - 您可以準確確認用戶是他們自稱的用戶。您現在需要的是一個授權系統 - 確定識別的用戶可以訪問的內容。

讓我們假設你有一個用戶ID爲101的標識。你可以在文件名前面加上101_來指定只有該用戶可以訪問的文件名。 101_report.pdf fopr示例。您需要編寫一些代碼以防止提供帶有錯誤ID前綴的文件。 (如果您不希望用戶看到它,或者您可以將所有用戶的文件存儲在名爲101的文件夾中,則可以在完成授權檢查後刪除101_)。

如果您希望文件可以被多個用戶訪問,您將不得不開發一種將用戶鏈接到文件並在每次顯示頁面時檢查這些鏈接的方法。如果您可以將用戶從邏輯上分組爲可以共享給定文件集的真實世界組,則您可能還需要考慮組。但只有在你真的需要它時纔會這樣做,因爲它增加了一個全新的複雜程度。

實現此目的的一種常見方式是將文件作爲二進制數據存儲在數據庫中。如果您使用SQL Server,不要擔心數據庫變得太大。二進制字段不存儲在數據表本身中,因此它們不會影響性能。這可以讓你快速查找登錄用戶使用快速數據庫連接訪問的文件。然後當用戶請求一個特定的文件時(在經過另一次檢查之後 - 你不能太小心)流出響應流中的數據。