每个站点的 IIS 请求过滤

每个站点的 IIS 请求过滤

我需要禁用 IIS 服务器提供某些文件的功能,我偶然发现了请求过滤,但出于某种原因,我无法让它在每个站点上运行。我相信我的网站正在继承并被 applicationHost.config 中的全局 IIS 配置覆盖

我想在站点配置文件的 System.web 部分放置类似以下内容的内容。

<security>
 <requestFiltering>
   <fileExtensions>
     <add fileExtension=".xml" allowed="false" />
   </fileExtensions>
 </requestFiltering>
</security>

但这似乎不起作用,您仍然可以访问 .xml 文件,尝试设置隐藏段也会产生同样的效果。

我做了一些研究,但无济于事,并对 IIS 的 applicationHost.config 做了一些更改

<section name="requestFiltering" overrideModeDefault="Allow" />

(这是针对 system.webServer 的正确部分组)”

我还运行了以下命令,它似乎只是从 applicationHost.config 中删除了所有设置,但仍然没有效果

C:\Windows\System32\inetsrv>appcmd.exe unlock config -section:system.webServer/security/requestFiltering

我遇到的所有答案似乎都集中于做相反的事情并启用 IIS 来提供静态文件服务,我想用一个似乎已经提供所有文件的服务器来做完全相反的事情。

答案1

因此经过大量搜索后,我最终创建了一个新网站来测试网络服务器上的问题,这帮助我找到了问题所在。

新网站没有表现出有问题的行为,通过比较 applicationHost.config 中的不同网站设​​置,我在 applicationPools 下找到了以下设置

<add name="WebsiteNameRemoved" autoStart="true" enableConfigurationOverride="false" managedPipelineMode="Integrated">
            <processModel identityType="ApplicationPoolIdentity" />
</add>

解决方案是将 enableConfigurationOverride 设置为 true (默认情况下为 true,因此删除它也可以)

因此将其更改为以下内容将解决该问题

<add name="WebsiteNameRemoved" autoStart="true" enableConfigurationOverride="true" managedPipelineMode="Integrated">
            <processModel identityType="ApplicationPoolIdentity" />
</add>

相关内容