awe*_*awe 3 asp.net iis-7 web-config
我想限制我的网络应用程序,以便无法下载/显示.txt文件.这是我可以在我的web.config文件中设置的内容吗?
我在配置文件中尝试了这个:
<system.web>
<httpHandlers>
<add verb="*" path="*.txt" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
</system.web>
Run Code Online (Sandbox Code Playgroud)
......但它没有效果.我使用的是IIS7,应用程序是.NET3.5,这可能与它有关吗?我知道这实际上适用于.NEt 1.0 1.1和2.0.
我在文档中注意到了(添加httpHandlers),需求部分:
Microsoft Internet信息服务(IIS)版本5.0,5.1或6.0
.NET Framework版本1.0,1.1或2.0
Microsoft Visual Studio 2003或Visual Studio 2005
...表示.NET 3和IIS7不支持此...
在IIS7中指定了哪里?
请查看此MS支持文章,了解如何实现此目的:如何:使用ASP.NET保护文件类型.
它涉及设置IIS以将这些请求转发到ASP.NET,然后设置web.config以阻止所需的文件类型,例如:(这适用于您的开发机器以及IIS7之前 - 请务必在下面看到)
<system.web>
<httpHandlers>
<add verb="*" path="*.ini" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
</system.web>
Run Code Online (Sandbox Code Playgroud)
根据httpHandlers Element页面,从.NET 2.0开始默认禁止以下扩展(.ini不是其中之一):
*.asax,*.ascx,*.master,*.skin,*.browser,*.sitemap,*.config,*.cs,*.csproj,*.vb,*.vbproj,*.webinfo,*. licx,*.resx,*.resources,*.mdb,*.vjsproj,*.java,*.jsl,*.ldb,*.dsdgm,*.ssdgm,*.lsad,*.ssmap,*.cd,*.dsprototype,*.lsaprototype,*.sdm,*.sdmDocument,*.mdf,*.ldf
编辑:这适用于IIS 7.0之前的IIS版本.IIS 7.0添加了一个额外的操作模式,称为集成模式(ASP.NET的默认设置),它需要放置处理程序<system.webServer>/<handlers>而不是<system.web>/<httpHandlers>.我在此页面上添加了一些更多信息和链接到@ awe的答案,请查看更多详细信息.
重要!对于IIS 7.0或更高版本
如编辑中所指定,您需要将<add>元素放在不同的位置,并且规则也需要名称 - 如果您没有指定名称,则重新启动时将出现500内部错误
<system.webServer>
<handlers>
<add name="IgnoreIni" verb="*" path="*.ini" type="System.Web.HttpForbiddenHandler" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
好的。我发现了问题所在。在.NET 3 中,这在 web.config 文件的不同部分中指定。而不是<system.web><httpHandlers>,它是<system.webServer><handlers>这样的:
<system.webServer>
<handlers>
<add name="NoTxtAllowed" verb="*" path="*.txt"
type="System.Web.HttpForbiddenHandler" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
尽管这是对我有用的答案,但我已将Ahmad Mageed的答案标记为答案,因为他在我在问题中添加 .NET 3 的版本信息之前提供了它。他还为我指出了找到解决方案的正确方向。请注意,他的回答对于 .NET 3 之前的所有版本都是正确的。
编辑: IIS 7.0 支持 2 种模式,集成和经典。集成是 IIS 7.0 上的 ASP.NET 应用程序的默认模式,它需要放置处理程序<system.webServer>/<handlers>而不是<system.web>/<httpHandlers>(经典模式和以前的 IIS 版本支持此模式)。
有关此问题的有用链接:
| 归档时间: |
|
| 查看次数: |
8193 次 |
| 最近记录: |