簡體   English   中英

在ASP.Net中將靜態文件限制為對經過身份驗證的用戶進行訪問

[英]Restrict static files access to authenticated users in ASP.Net

我們有一個舊的asp.net網站(.Net 2.0),將其稱為“ ChildWeb”,其中包含數百個pdf文檔。 通過從父網站接收GUID對該網站進行身份驗證,將其稱為“ ParentWeb”。 用戶將登錄到“ ParentWeb”,然后單擊鏈接導航到“ ChildWeb”。

在“ ChildWeb”中,進行條件檢查以檢查會話中是否存在GUID或某些值以允許用戶使用。 如果沒有,則用戶將被重定向到“ ParentWeb”的登錄頁面。

由於實際上未在站點級別配置此“ ChildWeb”的任何身份驗證,因此,如果有人知道該文檔的URL,則所有文檔都將不進行身份驗證。 我正在尋找一種解決此問題的方法。

我在想的是將應用程序配置為使用表單身份驗證,並將重定向URL設置為“ ParentWeb”(它們位於同一域下),然后將“ ParentWeb”重定向到“ ChildWeb”中的頁面,該頁面配置為允許匿名根據相同的GUID或會話變量檢查,訪問並設置該頁面中的FormAuthentication cookie。 然后,我可以使包含所有文檔的文件夾僅由經過身份驗證的用戶訪問。

上述方法是否有任何問題或風險? 通過使用Heep Handler或其他方法,還有其他更好的方法嗎?

有幾種解決方法。

首先,一種簡單的方法是僅創建一個ashx下載處理程序。 傳入GUID進行身份驗證和PDF文件名。 這將掩蓋PDF文件所在的位置,並且如果您的GUID過期,則將防止它們沿途使用相同的URL。

如果您在專用服務器上運行,則另一種簡單的方法是將PDF文件移動到ASP.NET應用程序文件夾之外。 在C:驅動器的根目錄上創建一個目錄,然后將文件復制到該目錄中。 然后創建一個通用的.ashx處理程序。 將您的GUID作為查詢參數傳遞給處理程序,並在處理程序中使它對GUID進行身份驗證並提供適當的PDF文件。 如果使用共享主機,還可以將文件移動到由ASP.NET自動保護的App_Data文件夾。

如果可行,另一種方法是對所有PDF文件進行加密,並創建一個通用的.ashx處理程序,該處理程序再次對GUID進行身份驗證,解密PDF文件,然后將其提供服務。

另一種方法是將PDF文件存儲在SQL數據庫中。 如果您的應用程序流量很大,則不建議使用此方法。 如果流量很大,這將大大減慢您的應用程序的速度。 但是要這樣做,請以SQL存儲PDF,然后創建一個.ashx處理程序以對GUID進行身份驗證並提供適當的PDF文件。

當然,最后的方法是您所建議的使用Forms身份驗證。 您可以使用位置標記拒絕用戶訪問您的web.config中的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM