2012-03-23 40 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部分中)禁用匿名身份验证。 现在只有您的网站已通过身份验证的用户才能访问您选择的文件夹。

相关问题