web-dev-qa-db-ja.com

HTTP OPTIONSメソッドは、IIS 8.5で許可されているメソッドをどのように決定しますか?

IIS 8.5(Windows Server 2012 R2 Datacenter)のWebサイトからTRACEメソッドを削除しようとしています。これは、次のようにリクエストフィルタリングを使用して実装しています。

<system.webServer>
  <security>
    <requestFiltering>
      <verbs allowUnlisted="true">
        <add verb="TRACE" allowed="false" />
      </verbs>
    </requestFiltering>
  </security>
</system.webServer>

これはTRACEリクエストを防ぎますが、OPTIONSリクエストを送信した場合でも、TRACEおよびAllowヘッダーにPublicがリストされます。 IISをリセットしましたが、TRACEからOPTIONSを取得できません。 OPTIONSを否定したくありません。

私たちが遵守しているコンプライアンススキャンでは、OPTIONSが有効であることを示すインジケータとしてTRACEを使用しているように見えるため、これには問題があります。私はこれが正しくないことを知っていますが、それは私が満たさなければならない基準です。

使用可能なメソッドを正しく報告するオプションを取得する方法はありますか?

8
alergy

興味深い質問です。削除するすべてのメソッドresponse headers from IIS AllowおよびPublicヘッダーでは機能しないようです。OPTIONSリクエストは常に次を返します:

Allow:  OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST

サーバーが実際に許可するものに関係なく。

IIS=内のすべてのリクエストはモジュールによって処理されます。OPTIONSリクエストはProtocolSupportModuleによって処理されます。これは必須ではなく、かなり馬鹿げているようです。

そのモジュールを削除すると、サーバーはオプションリクエストに応答しなくなりますが、これは引き続きサポートする必要があるため、別のモジュールを使用してそれらに応答する必要があります。

開いた:

%SystemRoot%\System32\inetsrv\config\applicationHost.config

OPTIONSVerbHandlerを検索して、その行にコメントします。その行にいる間は、上の行(TRACEVerbHandler)も同様です。次に、新しいノードを追加します。

<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />

ブロック全体は次のようになります。

    <!--  <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" /> 
          <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> -->
          <add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" /> 

これで、staticFileModuleはOPTIONSリクエストを処理しますが、コンテンツを返しません。

サーバーにOPTIONSリクエストを送信すると、AllowヘッダーもPublicヘッダーも取得されず、web.configに簡単に追加できます

<system.webServer>
 <httpProtocol>
      <customHeaders>
          <add name="Allow"  value="GET,POST,HEAD" />  
          <add name="Public" value="GET,POST,HEAD" />
      </customHeaders>
  </httpProtocol>        
</system.webServer>

これでOPTIONSリクエストは必要に応じて機能しますが、これらの追加ヘッダーは、まだ有効であると思われるGETまたはPOSTリクエストでも送信されますhttp。

これらのヘッダーをOPTIONSリクエストにのみ使用する場合は、これらのヘッダーを設定する単純なhttpモジュールを記述して、上記で使用したStaticFileModuleの代わりに使用することができます。

6
Peter Hahndorf