【问题标题】:How to secure a document/pdf request in MVC?如何保护 MVC 中的文档/pdf 请求?
【发布时间】:2015-03-04 17:54:44
【问题描述】:

我想知道保护文档的首选做法是什么。

如果我的页面中有这样的链接:

option 1)   http://myserver/documents/mydoc.pdf

我可以使用过滤器来检查用户是否已登录或具有正确的角色来保护它吗?

我的第一个想法是创建一个动作调用 ViewDoc。在 ViewDoc 中,我会检查权限等,然后读入文件并将其发送到响应中。

所以我的请求看起来像这样:

option 2)    http://myserver/mycontroller/ViewDoc/17

如果我选择选项 2,我是否需要将我的文件放在 web 文件夹之外?如果我在 web 文件夹中,用户可以直接向文件发出请求吗? 还有其他选择或建议吗?

【问题讨论】:

  • 只需通过具有授权属性的操作返回文档
  • 是的,这就是我要做的。我想知道是否有更简单的方法。

标签: c# asp.net-mvc-3 model-view-controller


【解决方案1】:

您提出的解决方案是正确的方法。

您将使用FileResult 操作(除非您有充分的理由不这样做),并且在该操作中您可能会使用[Authorize] 并执行任何必要的业务逻辑来验证用户应该正在阅读它。然后使用控制器的File() 函数返回文件。

[Authorize]
public FileResult ViewDoc(int id)
{
    // do things, maybe lookup file path of document from database
    return File(pathToYourFile, "document/pdf", "downloadedFileName.pdf");
}

【讨论】:

    【解决方案2】:

    只需通过带有 Authorize 属性的操作返回文档:

    [Authorize]
    public ActionResult GetFile(string filename)
    {
      //get the file somewhere
      return return File(file, "contentType");
    }
    

    【讨论】:

    • 我应该把文件放在哪里?在网络文件夹之外?如果我将它放在 web 文件夹中,我应该在 web.config 中保护该文件夹吗?
    • 最好将此文件放在应用程序之外的某个地方,例如文件服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2010-10-25
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多