我们使用表单身份验证来验证用户身份。在我们的应用程序中有一个页面可以下载一个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