如何防止匿名用户使用表单身份验证访问文件?

时间:2012-03-23 10:44:12

标签: c# asp.net download forms-authentication virtual-directory

我们正在使用表单身份验证来验证用户身份。在我们的应用程序中有一个下载exe的页面。

当我在visual studio中调试代码时,它只允许登录用户下载文件。当其他用户尝试下载文件时,会自动将其重定向到登录页面。

但是当我从虚拟目录运行时,所有用户(无论是否登录)都可以通过访问http://testappln/foldername/test.exe等直接路径来下载文件。

如何防止在这种情况下访问未经授权的用户?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

一种非常简单的方法是使用IIS来防止匿名访问文件夹。 只需打开IIS,选择您的站点并选择要保护它的文件夹。 选择文件夹后,双击身份验证页面中的身份验证(在IIS部分中)禁用匿名身份验证。 到目前为止,只有经过身份验证的网站用户才能访问您选择的文件夹。