【问题标题】:How to protect direct file access如何保护直接文件访问
【发布时间】:2014-05-03 23:00:39
【问题描述】:

我正在构建一个只有登录用户才能看到某些页面的网络表单应用程序。

这些页面包含指向多个文件的链接,但一旦用户知道完整的 URL(例如:“http://mywebsite.com/files/readme.txt”),他们就可以随时随地访问它,而无需登录。

我使用我的自定义身份验证,我没有使用 asp.net 提供的安全性。

如何防止此类问题,我正在使用 asp.net C# 4.5 webform 应用程序,我的托管服务提供商使用 IIS 7

【问题讨论】:

    标签: c# asp.net iis-7


    【解决方案1】:

    不要提供文件的直接链接。创建一个名为GetFile.aspx?id=1 的新页面并让该页面检索文件。这样,用户永远不会知道或直接访问您服务器上的文件。这样,您可以更改文件所在文件夹的安全性,以便只有 Web 服务器可以直接访问它们。

    将页面上的链接更改为:

    <a href="GetFile.aspx?id=1">Click here for read me file</a>

    如何从 asp.net 下载文件的示例:

    public void DownloadFile(string fileName)
    {
        Response.Clear();
        Response.ContentType = @"application\octet-stream";
        System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(FileName));
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.AddHeader("Content-Length", file.Length.ToString());
        Response.ContentType = "application/octet-stream";
        Response.WriteFile(file.FullName);
        Response.Flush();
    }
    

    取自这个问题的代码示例:Open any file from asp.net

    【讨论】:

    • ...并且不要将文件路径用作id
    【解决方案2】:

    您是否使用任何提供 ASP.Net(Windows、Forms、Passport)的身份验证方案?

    如果是,您可以在您的 Web.config 文件中添加一个“位置”部分,您可以在其中限制未登录用户对您的文件存储库的访问,如下所示(基于您的示例):

    <configuration>
      <location path="files">
        <system.web>
          <authorization>
            <deny users="?" />
          </authorization>
        </system.web>
      </location>
    </configuration>
    

    在这种情况下,用户是否知道完整的 url 地址并不重要,因为如果它离线,它将不可用

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      相关资源
      最近更新 更多