如何保护直接文件访问

时间:2014-03-25 20:42:20

标签: c# asp.net iis-7

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

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

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

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

2 个答案:

答案 0 :(得分:0)

不要提供文件的直接链接。创建一个名为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

答案 1 :(得分:0)

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

如果是,您可以在Web.config文件中添加一个位置&#39;您可以在其中限制非记录用户访问您的文件存储库的部分,如下所示(基于您的示例):

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

在这种情况下,如果用户知道完整的URL地址并不重要,因为如果它处于脱机状态,它将无法使用