Security
每個站點的 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 能夠服務靜態文件,我想對似乎已經提供所有文件的伺服器做完全相反的事情。
因此,經過大量搜尋後,我最終創建了一個新站點來測試網路伺服器上的問題,這有助於我找到問題所在。
通過比較 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>