【问题标题】:Disallow some file extension from being browsed禁止浏览某些文件扩展名
【发布时间】:2016-07-31 09:42:11
【问题描述】:

我正在使用 Asp.net mvc 来获取我的网站,它用于显示管理员上传的一些文件。

有一个目录(上传),管理员将文件放在上面。

现在我想知道的是,没有人可以通过浏览下面的 url 来访问该文件。

'www.mysite.com/Upload/somePdfFiles.pdf'

现在我想禁止下载“pdf”扩展名。

或者,我将设计一个页面,我将通过查询字符串、会话等获取文件路径,以便我自己下载文件。在此页面中,我将检查一些权限。

那么如何禁止浏览“pdf”扩展名。

【问题讨论】:

标签: asp.net asp.net-mvc iis web-config file-extension


【解决方案1】:

我认为这是不可能的 - 您无法区分查看和下载,因为最终实际文件内容会发送到浏览器,并且可以通过保存文档或直接访问 HTTP 内容来访问该内容使用可以捕获下载数据的 HTTP 客户端或 HTTP 代理。

可以通过多种方式拒绝对文件的访问,以使它们根本无法访问,但您不能将文件设为“只读”。要拒绝访问,您可以使用 IIS 过滤、显式 Location 排除(在 web.config 中)或将选择的扩展映射到 HttpForbiddenHandler 来禁用对某些扩展的访问。

您是在浏览器中查看文件还是下载文件是通过 HTTP 标头确定的。如果您没有在标题中明确指定Content-Disposition: attachment; filename=<filename>,浏览器将尝试使用适当的查看器在 Web 浏览器中打开下载的内容。对于 PDF,这通常意味着它将显示在内置的 PDF 查看器或已安装的 PDF 扩展中。但即使人们使用查看器,他们也始终可以从查看器中保存文档,因此您无法将该内容设为只读。

【讨论】:

    【解决方案2】:

    查看HttpForbiddenHandler Class 并在您的httpHandlers 设置中使用。

    例如

    链接/直接请求限制为仅/files 文件夹中的 PDF 文件 (403)

    <system.webServer>    
        <handlers>
        <!-- If you want to restrict all links
        <add verb="*" name="RestrictPDFGlobal" path="*.pdf" type="System.Web.HttpForbiddenHandler"/>
        -->
          <add verb="*" name="RestrictPDF" path="/files/*.pdf" type="System.Web.HttpForbiddenHandler"/>
        </handlers>
    </system.webServer>
    

    或者,我将设计一个页面,然后我将获得 查询字符串,会话等的文件路径,以便我可以下载文件 我自己。在此页面中,我将检查一些特权。

    您可以通过特权访问来做到这一点(下面有趣的注释) - 例如[Authorize]属性

    示例,根据需要改进:

    Home 控制器中:

    [Authorize]
    public FilePathResult DownloadPdf()
    {
        var cd = new System.Net.Mime.ContentDisposition
        {
            FileName = "foo.pdf"                
        };
        Response.AppendHeader("Content-Disposition", cd.ToString());
        return File("~/files/foo.pdf", "application/pdf");
     }
    

    查看:

    <p>@Html.ActionLink("PDF Download", "DownloadPdf", "Home")</p>
    

    注意:

    这里有趣的事情(我不知道答案)是为什么config中设置的限制“允许”这种方法(我们“手动”通过控制器返回它 ->操作与链接中的“直接”请求)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 2011-01-10
      • 2011-06-08
      • 2021-07-22
      相关资源
      最近更新 更多