Security

每個站點的 IIS 請求過濾

  • November 25, 2015

我需要禁用提供某些文件的 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>

引用自:https://serverfault.com/questions/738833