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


8

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

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

これはTRACEリクエストを防ぎますが、OPTIONSリクエストを送信した場合でもTRACEAllowおよびPublicヘッダーにリストされます。IISをリセットしましたが、から抜け出すTRACEことができませんOPTIONS。否定したくないOPTIONS

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

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

回答:


6

興味深い質問です。response headersIIS から削除するすべてのメソッドは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要求は必要に応じて機能しますが、これらの追加ヘッダーは、まだ有効であると思われるGETor POST要求とともに送信されます。

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


答えをありがとう、OPTIONSハンドラーを置き換える必要があるかどうか疑問に思っていました。あなたの答えはこれを処理するためのルートを提供します。
アレルギー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.