MVC 5 IIS 8.5保护pdf文件

时间:2017-10-27 08:45:12

标签: c# asp.net asp.net-mvc iis-8

我一直在寻找解决方案,但似乎找不到符合我要求的解决方案。 我有一个受密码保护的MVC应用程序并使用Identity 2.0。应用程序中存储了大量PDF文件,我只想让经过身份验证的用户能够访问。

PDF存储在很多单独的文件夹中,系统有1000个案例,每个案例都有自己的Case文件夹,如:

/Cases
    /CaseId
        /Letters
            /Letter1.pdf
            /Letter2.pdf
        /Reports
            /Report1.pdf
            /Report2.pdf

我尝试过使用web.config

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

但我认为我不能使用这个,因为PDF是跨多个子文件夹,这只会保护/Cases文件夹中的文件,而不是子文件夹中的文件,这是正确的吗?

我已经看到HttpHandler可以解决这个问题了,我试过了:

<add name="PDFHandler" verb="*" path="*.pdf" type="System.Web.StaticFileHandler" resourceType="Unspecified" />

但这似乎不适用于它自己,我还需要在MVC中写一些东西吗?

如果有人能让我知道解决这个问题的最佳方法,请指出我的解决方案。

非常感谢。

修改

的Web.config

  <location path="~/Cases">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
  <system.web>
    <customErrors mode="Off" defaultRedirect="~/Error/Trouble">
      <error statusCode="403" redirect="~/Error/NotFound"></error>
      <error statusCode="401" redirect="~/Error/NotAuthorized"></error>
    </customErrors>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" maxRequestLength="51200" />
    <globalization uiCulture="en-GB" culture="en-GB" />
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <add name="PDFHandler" verb="*"
        path="*.pdf"
        type="System.Web.StaticFileHandler"
        resourceType="Unspecified" />
    </handlers>
  </system.webServer>

2 个答案:

答案 0 :(得分:1)

不确定您的情况是否可行,但处理安全性的最佳方法是将所有PDF文件移到应用程序目录之外,并仅通过控制器上的操作访问它们。这样,您就可以处理代码中的安全性,并且它比使用配置更加健壮。

答案 1 :(得分:0)

在这个问题Web.config Deny access to subfolder recursively

中,对web.config的更改似乎就像我想要的那样