IIS: Как отключить HTTP-метод TRACE? - PullRequest
0 голосов
/ 08 февраля 2019

Я последовал за этим , что привело к этому , чтобы попытаться отключить мой сайт от принятия метода TRACE (глагол).В основном я добавил следующий раздел к <system.webServer> внутри Web.config (веб-сайт по умолчанию и другой веб-сайт):

<security>
   <requestFiltering>
       <verbs applyToWebDAV="false">
          <add verb="TRACE" allowed="false" />
       </verbs>
   </requestFiltering>
</security>

Это не сработало.Затем я зашел в C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config и заменил глагол всех обработчиков внутри <handlers>.В двух словах, все строки, подобные этой:

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />

Стали так:

<add name="StaticFile" path="*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />

Я даже перезапустил сервер, но когда я проверял доступные методы, TRACE все еще там:

$ curl -I -X OPTIONS https://example.com/mysite
HTTP/1.1 200 OK
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
X-XSS-Protection: 1; mode=block
Date: Thu, 07 Feb 2019 21:03:49 GMT
Content-Length: 0

Итак, как мне от этого избавиться?

1 Ответ

0 голосов
/ 08 февраля 2019

Чтобы действительно блокировать TRACE запросы, вы все равно должны сохранять правило фильтрации запросов с заблокированным глаголом TRACE.

Команда curl отправляет запрос OPTIONS в IIS, а ProtocolSupportModule генерирует ответсообщение,

https://docs.microsoft.com/en-us/iis/get-started/introduction-to-iis/iis-modules-overview

Однако Microsoft не разработала никаких параметров в разделе system.webServer/httpProtocol, чтобы вы могли изменить значение заголовков, чтобы скрыть оттуда TRACE.

Но обходной путь - использовать модуль перезаписи URL,

https://blogs.msdn.microsoft.com/benjaminperkins/2012/11/02/change-or-modify-a-response-header-value-using-url-rewrite/

, где вы создаете два исходящих правила для заголовков Allow и Public,

<rewrite>
    <outboundRules>
        <rule name="ChangeHeaders" stopProcessing="false">
            <match serverVariable="RESPONSE_Allow" pattern="OPTIONS, TRACE, GET, HEAD, POST" />
            <action type="Rewrite" value="OPTIONS, GET, HEAD, POST" />
        </rule>
        <rule name="Public">
            <match serverVariable="RESPONSE_Public" pattern="OPTIONS, TRACE, GET, HEAD, POST" />
            <action type="Rewrite" value="OPTIONS, GET, HEAD, POST" />
        </rule>
    </outboundRules>
</rewrite>
...