Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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# 限制下载.xml文件和.cs文件_C#_Asp.net - Fatal编程技术网

C# 限制下载.xml文件和.cs文件

C# 限制下载.xml文件和.cs文件,c#,asp.net,C#,Asp.net,在其中一个项目中,我看到了下面的代码 string FileName = Request.QueryString["filename"]; System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.ClearContent(); response.Clear(); response.ContentType

在其中一个项目中,我看到了下面的代码

        string FileName = Request.QueryString["filename"];
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "application/octet-stream";
        response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
        response.TransmitFile(Server.MapPath("~/" + FileName));
        response.Flush();
        response.End();
用于从服务器下载文件。现在,若有人手动更改查询字符串中的文件名(比如web.config),那个么它也会下载配置文件


因此,请分享您关于如何根据文件扩展名限制下载的知识。

这通常在IIS中完成。但是,如果您想以编程方式执行此操作:

string[] forbiddenExtensions = new string[] {".config", ".abc", ".xml" };
FileInfo fi = new FileInfo(FileName);
if (forbiddenExtensions.Contains(fi.Extension))
{
    //throw some error or something...
}

首先,您必须问问自己是否要编写代码让用户下载文件系统上的文件。web服务器本身可以很好地处理文件下载并阻止访问不应共享的文件

如果您确定要这样做,例如,因为您希望在每次下载之前运行一些代码,那么您应该查看。然后web服务器仍将首先确定权限等,以防止恶意用户下载敏感文件,如果允许,您的代码将在下载之前运行


也就是说,您不想提供从web根目录下载的文件。相反,创建一个专用目录,比如“Downloads”,并托管您的文件以便从那里下载。然后使用
filename=Path.GetFileName(filename)
阻止用户在该目录之外导航(使用
和/或
\
)。

绝不允许从网站根目录下载。始终使用专用的
文件
内容
公共
上传
区域。您完全正确。但在这个阶段,我无法更改它,因为它在整个解决方案中被使用了很多次。是否可以通过配置文件或IIS中的某些配置进行更改?我不想更改代码。我可以帮你。。。但是,您应该明确地将文件移动到特定文件夹和/或重构代码。花点时间修复这些漏洞……MIME类型列表中没有配置扩展名。