我們使用表單身份驗證來驗證用戶身份。在我們的應用程序中有一個頁面可以下載一個exe文件。如何防止匿名用戶使用表單身份驗證訪問文件?
當我在visual studio中調試代碼時,它只允許登錄用戶下載文件。當其他用戶嘗試下載文件時,它們會自動重定向到登錄頁面。
但是,當我從虛擬目錄運行此操作時,所有用戶(無論是否已登錄)都可以通過訪問直接路徑(如http://testappln/foldername/test.exe
)來下載該文件。
如何防止在這種情況下訪問未經授權的用戶?
我們使用表單身份驗證來驗證用戶身份。在我們的應用程序中有一個頁面可以下載一個exe文件。如何防止匿名用戶使用表單身份驗證訪問文件?
當我在visual studio中調試代碼時,它只允許登錄用戶下載文件。當其他用戶嘗試下載文件時,它們會自動重定向到登錄頁面。
但是,當我從虛擬目錄運行此操作時,所有用戶(無論是否已登錄)都可以通過訪問直接路徑(如http://testappln/foldername/test.exe
)來下載該文件。
如何防止在這種情況下訪問未經授權的用戶?
一種可能性是將文件放在禁止直接訪問的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>
如果我從JavaScript下載這樣的文件window.open('http://testappln/foldername/test.exe' ,'下載'),那麼我該如何處理這種情況? – 2012-03-23 10:56:18
@mahesh,像這樣:'window.open('download.ashx','Download');'。 – 2012-03-23 10:58:24
一個非常簡單的方法是使用IIS來防止匿名訪問文件夾。 只需打開IIS,選擇您的網站並選擇您想要保護它的文件夾。 選擇該文件夾後,雙擊身份驗證頁面中的身份驗證(在IIS部分中)禁用匿名身份驗證。 現在只有您的網站已通過身份驗證的用戶才能訪問您選擇的文件夾。
您正在使用哪個版本的IIS?如果您正在使用IIS 7.0+,您是以經典還是集成模式運行?用戶如何從他的瀏覽器訪問服務器上的'C:\ foldername \ test.exe'? – 2012-03-23 10:46:29
@DarinDimitrov:對不起..我改變了路徑.. :) – 2012-03-23 10:49:30
@DarinDimitrov:IIS5.1 – 2012-03-23 10:50:13