我正在創建一個招聘網站,並有一個名爲/ CV /的文件夾,用於存儲會員上傳的簡歷文件。Asp.net - 防止從一個特定的文件夾下載文件(PDF,Word)
讓我們說一個用戶保存他們的簡歷和它的123.pdf並保存在cv/123.pdf中。 如何防止PDF文件在瀏覽器窗口中加載或下載到用戶機器,如果他們鍵入'http://mydomain.com/cv/123.pdf'?
我在IIS6服務器上使用窗體身份驗證,Asp.Net成員和角色提供程序,Asp.net 4。
我正在創建一個招聘網站,並有一個名爲/ CV /的文件夾,用於存儲會員上傳的簡歷文件。Asp.net - 防止從一個特定的文件夾下載文件(PDF,Word)
讓我們說一個用戶保存他們的簡歷和它的123.pdf並保存在cv/123.pdf中。 如何防止PDF文件在瀏覽器窗口中加載或下載到用戶機器,如果他們鍵入'http://mydomain.com/cv/123.pdf'?
我在IIS6服務器上使用窗體身份驗證,Asp.Net成員和角色提供程序,Asp.net 4。
最好的方法是將文件放在別的地方,然後編寫一些代碼來訪問它們 - 然後代碼可以驗證調用者是否擁有必要的權限。
例如,您可以將文件存儲在您的/uploads/xyz123/
目錄中。然後,爲了下載文件,例如myresume.pdf
,用戶將不得不衝浪到http://yourserver/download.aspx?file=myresume.pdf。
然後該網頁進行必要的驗證,加載該文件,將其作爲一個二進制瀏覽器,像這樣:
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=" + filename);
Response.AddHeader("content-length", binaryStream.Length.ToString);
Response.BinaryWrite(binaryStream.ToArray());
Response.Flush();
Response.End();
任何用戶都不會找出文件實際存儲。
通常情況下, 「其他地方」 是不是通過Web訪問的文件夾,所以如果你是網站的根是/的Inetpub/wwwroot文件/,你可能在/ inetpub/files中有文件,然後編寫一個處理程序,在執行正確的權限檢查後提供文件。此外,您可以使用web.config來允許/拒絕對文件夾的訪問 - 但這是一個廣泛的[基於用戶的授權](http://www.asp.net/security/tutorials/user-based-authorization- CS) – Prescott
@羅伊 - 是的,我曾考慮過這種方法,但想知道是否有辦法做到這一點,同時保持文件夾在應用程序文件夾結構。 – TGuimond
您可以簡單地將文件保存在不屬於您的Web應用程序的一個目錄中。
如果你想存儲一個不應該通過http訪問的文件,就這樣做。
非常感謝。我最終使用了將其存儲在App_Data文件夾中並創建一個處理程序來傳輸文件的方法。 http://www.mikesdotnetting.com/Article/122/Simple-File-Download-Protection-with-ASP.NET – TGuimond