从下载中限制.xml文件和.cs文件

时间:2016-04-26 11:53:20

标签: c# asp.net

在其中一个项目中,我看到了以下代码。

        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),那么它也会下载配置文件。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

如果您确定要执行此操作,例如因为您希望在每次下载之前运行一些代码,那么您应该查看creating a handler。然后,Web服务器仍将首先确定权限和诸如此类,以防止恶意用户下载敏感文件,并且在允许时,您的代码将在下载之前运行。

话虽如此,您并不想从您的网络根目录下载文件。而是创建一个专用目录,例如" Downloads",并托管您的文件以便从那里下载。然后使用filename = Path.GetFileName(filename)阻止用户在该目录之外导航(使用..和/或\)。