2012-03-23 39 views
1

我們使用表單身份驗證來驗證用戶身份。在我們的應用程序中有一個頁面可以下載一個exe文件。如何防止匿名用戶使用表單身份驗證訪問文件?

當我在visual studio中調試代碼時,它只允許登錄用戶下載文件。當其他用戶嘗試下載文件時,它們會自動重定向到登錄頁面。

但是,當我從虛擬目錄運行此操作時,所有用戶(無論是否已登錄)都可以通過訪問直接路徑(如http://testappln/foldername/test.exe)來下載該文件。

如何防止在這種情況下訪問未經授權的用戶?

+0

您正在使用哪個版本的IIS?如果您正在使用IIS 7.0+,您是以經典還是集成模式運行?用戶如何從他的瀏覽器訪問服務器上的'C:\ foldername \ test.exe'? – 2012-03-23 10:46:29

+0

@DarinDimitrov:對不起..我改變了路徑.. :) – 2012-03-23 10:49:30

+0

@DarinDimitrov:IIS5.1 – 2012-03-23 10:50:13

回答

3

一種可能性是將文件放在禁止直接訪問的App_Data文件夾中,然後使用通用ASHX處理程序來讀取文件的內容並將其返回給客戶端。然後,你可以限制訪問這個通用的處理程序只有通過驗證的用戶:

<%@ WebHandler Language="C#" Class="Download" %> 

using System; 
using System.Web; 

public class Download : IHttpHandler 
{ 
    public void ProcessRequest (HttpContext context) 
    { 
     context.Response.ContentType = "application/octet-stream"; 
     context.Response.WriteFile("~/App_Data/test.exe"); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

,並在您的web.config您限制訪問Download.ashx處理程序:

<location path="Download.ashx"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 
+0

如果我從JavaScript下載這樣的文件window.open('http://testappln/foldername/test.exe' ,'下載'),那麼我該如何處理這種情況? – 2012-03-23 10:56:18

+0

@mahesh,像這樣:'window.open('download.ashx','Download');'。 – 2012-03-23 10:58:24

1

一個非常簡單的方法是使用IIS來防止匿名訪問文件夾。 只需打開IIS,選擇您的網站並選擇您想要保護它的文件夾。 選擇該文件夾後,雙擊身份驗證頁面中的身份驗證(在IIS部分中)禁用匿名身份驗證。 現在只有您的網站已通過身份驗證的用戶才能訪問您選擇的文件夾。

相關問題