【发布时间】:2015-07-06 05:21:34
【问题描述】:
我已经在我的网站上成功设置了一个测试区域,该测试区域使用 iis 8 上的表单身份验证进行了身份验证。我在与 asp.net 的集成模式下使用它,据我所知,这意味着我使用正确的 web.config 文件能够使服务器在所有内容上使用 asp.net 身份验证,而不仅仅是 URL。如果我尝试导航到一个我没有输入凭据的页面,它会返回错误 403,这正是我所期望的。但是,如果我准确地输入存储在站点上的文件的路径,它会下载文件而无需提供凭据。这是我当前的顶级 web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="false">
</compilation>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="default.aspx" />
</authentication>
<authorization>
<allow users="*" />
</authorization>
</system.web>
<location path="staff/test/test">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<system.webServer>
<modules>
<remove name="FormsAuthenticationModule" />
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<remove name="RoleManager" />
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
<remove name="DefaultAuthentication" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
</modules>
</system.webServer>
/staff/test/test 区域中有一个 word 文档。如果我在浏览器中输入www.website.com/staff/test/test/test.doc,就会下载文件。
我应该更改什么来保护该文件?
【问题讨论】:
-
您可以尝试将其添加到您的模块节点 runAllManagedModulesForAllRequests="true" 吗?
-
@Sushil 虽然这会起作用,但这不是必需的,而且是矫枉过正。 This answer 展示了如何通过 ASP.NET 管道放置特定的文件类型,以便可以通过 web.config 保护它们。
-
感谢@MikeSmithDev。 httphandler 总是最适合这种情况。
-
如果您需要进行更高级的处理,另一种方法-stackoverflow.com/a/19124733/1810243。
标签: c# asp.net iis web-config