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
を使用しているように見えるため、これには問題があります。私はこれが正しくないことを知っていますが、それは私が満たさなければならない基準です。
使用可能なメソッドを正しく報告するオプションを取得する方法はありますか?
興味深い質問です。削除するすべてのメソッド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の代わりに使用することができます。