MVC 5 IIS 8.5 保护 pdf 文件
MVC 5 IIS 8.5 securing pdf files
我一直在四处寻找解决方案,但似乎找不到符合我要求的解决方案。
我有一个受密码保护并使用 Identity 2.0 的 MVC 应用程序。应用程序中存储了很多 PDF 文件,我只希望经过身份验证的用户能够访问这些文件。
PDF 存储在许多单独的文件夹中,系统有 1000 个案例,每个案例都有自己的案例文件夹,例如:
/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>
不确定您的情况是否可行,但处理安全问题的最佳方式是将所有 PDF 文件移到应用程序目录之外,并且只能通过控制器上的操作来访问它们。这样,您就可以在代码中处理安全问题,并且比使用配置更健壮。
对 web.config 的更改似乎符合我在这个问题中的要求 Web.config Deny access to subfolder recursively
我一直在四处寻找解决方案,但似乎找不到符合我要求的解决方案。 我有一个受密码保护并使用 Identity 2.0 的 MVC 应用程序。应用程序中存储了很多 PDF 文件,我只希望经过身份验证的用户能够访问这些文件。
PDF 存储在许多单独的文件夹中,系统有 1000 个案例,每个案例都有自己的案例文件夹,例如:
/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>
不确定您的情况是否可行,但处理安全问题的最佳方式是将所有 PDF 文件移到应用程序目录之外,并且只能通过控制器上的操作来访问它们。这样,您就可以在代码中处理安全问题,并且比使用配置更健壮。
对 web.config 的更改似乎符合我在这个问题中的要求 Web.config Deny access to subfolder recursively