Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止匿名用户使用表单身份验证访问文件?_C#_Asp.net_Download_Forms Authentication_Virtual Directory - Fatal编程技术网

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

C# 如何防止匿名用户使用表单身份验证访问文件?,c#,asp.net,download,forms-authentication,virtual-directory,C#,Asp.net,Download,Forms Authentication,Virtual Directory,我们使用表单身份验证来验证用户。在我们的应用程序中,有一个下载exe的页面 当我在VisualStudio中调试代码时,它只允许登录用户下载文件。当其他用户尝试下载文件时,他们会自动重定向到登录页面 但是,当我从虚拟目录运行该文件时,所有用户(无论是否登录)都可以通过访问直接路径下载该文件,如http://testappln/foldername/test.exe 在这种情况下如何防止未经授权的用户访问?一种可能是将文件放入禁止直接访问的App\u Data文件夹中,然后使用通用ASHX处理程序

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

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

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


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

一种可能是将文件放入禁止直接访问的
App\u 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;
        }
    }
}

一种可能是将文件放入禁止直接访问的
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;
        }
    }
}

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

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

您使用的是哪个版本的IIS?如果您使用的是IIS 7.0+,您是在经典模式下运行还是在集成模式下运行?用户如何从浏览器访问服务器上的
C:\foldername\test.exe
。。我更改了路径..:)您正在使用哪个版本的IIS?如果您使用的是IIS 7.0+,您是在经典模式下运行还是在集成模式下运行?用户如何从浏览器访问服务器上的
C:\foldername\test.exe
。。我更改了路径:)如果我从javascript window.open(')下载这样的文件,那么我如何处理这种情况?@mahesh,比如:
window.open('download.ashx','download')
。如果我是从javascript window.open(')下载这样的文件,那么我如何处理这种情况?@mahesh,比如:
window.open('download.ashx','download')