【问题标题】:How to prevent anonymous users from accessing a file using forms authentication?如何防止匿名用户使用表单身份验证访问文件?
【发布时间】:2012-03-23 10:44:11
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您使用的是哪个版本的 IIS?如果您使用的是 IIS 7.0+,您是在经典模式还是在集成模式下运行?用户如何通过浏览器访问服务器上的C:\foldername\test.exe?
  • @DarinDimitrov:对不起..我改变了路径..:)

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


【解决方案1】:

一种可能性是将文件放在禁止直接访问的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('testappln/foldername/test.exe','Download') 下载这样的文件,那么我该如何处理这种情况?
  • @mahesh,像这样:window.open('download.ashx','Download');.
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多