【问题标题】:How do I restrict access to pdf files on my server?如何限制对我服务器上 pdf 文件的访问?
【发布时间】:2010-03-03 00:52:52
【问题描述】:

我正在使用 ASP.Net MVC。我使用 ASP Forms 身份验证限制了对网站的访问。但是,网页包含服务器上我也希望保护的 pdf 文件的链接。

例如,用户可以浏览到 foo.com 和 foo.com/account/logon。一旦他们登录,他们就可以访问 foo.com/category/bar,它在 bar.aspx 中显示视图。在该视图上是指向 foo.com/files/theta.pdf 的链接,该链接可以很好地加载到浏览器中。但是,除非用户经过身份验证,否则我不希望 foo.com/files/theta.pdf 可以从浏览器访问。

如何防止用户在未先在 foo.com/account/logon 进行身份验证的情况下直接从浏览器访问 foo.com/files/theta.pdf?

【问题讨论】:

    标签: asp.net-mvc pdf


    【解决方案1】:

    通过控制器传递请求,并返回FileResult。您可以通过使用Authorize 属性或通过检查控制器方法内部的权限,对控制器方法应用任何您想要的安全性。

    this question 有一个这样的代码示例,它说明了如何返回图像文件。只需返回您的 pdf 而不是图像文件,并使用 application/pdf 作为 MIME 类型。

    【讨论】:

    • 谢谢。我更改了控制器以接受标识文件的参数,然后构造路径并返回 FileResult。这具有显示 PDF 的预期效果。但是,用户仍然可以在浏览器中添加整个链接并打开它。我尝试按照 Charles 的建议将 location 元素添加到 web 配置中,但这并没有成功(也许我做错了什么)。但是,通过使用 IIS 管理器在该文件夹上添加“拒绝”规则,我能够获得所需的效果。所以现在用户不能直接显示 PDF。
    • However, a user could still add the entire link in the browser and bring it up. -- 这就是您将 Authorize 属性添加到控制器方法的原因,以限制仅分配给适当角色的那些用户的访问权限。如果用户键入一个他被拒绝访问的 URL,他可以被重定向到登录或未经授权的页面,而不是返回 FileResult。这与您将添加到 any 控制器方法以根据用户分配的角色允许或拒绝访问的安全性相同。更多信息在这里:nerddinnerbook.s3.amazonaws.com/Part9.htm
    【解决方案2】:

    如果您想限制对/files 目录的所有访问,您可以简单地在web.config 中使用location 元素来限制访问。

    例如

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

    我应该补充一点,我同意 Robert 和 Rob 的高级安全性,但如果您只想要一个简单的解决方案,这应该可以解决问题。 :-)

    HTH,
    查尔斯

    【讨论】:

    • 不限制静态文件,它们由 StaticFileModule 处理程序模块处理,不使用您的授权设置
    【解决方案3】:

    使用 FileResult,我相信它是一个内置的 ActionResult。这将发回您可以拥有各种授权的二进制数据:

    http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx

    【讨论】:

    • 如果用户知道媒体的 URL,这将如何限制对媒体的访问?
    【解决方案4】:

    如果你使用过 ASP.NET Core,你可以使用Resource-based authorization

    授权策略取决于被访问的资源。考虑一个具有 author 属性的文档。仅允许作者更新文档。因此,必须先从数据存储中检索文档,然后才能进行授权评估。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2012-01-27
      • 2020-09-26
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      相关资源
      最近更新 更多