Веб-сервер Apache/Tomcat: nmap всегда возвращает, что все http-методы разрешены

Я использую веб-сервер с http-сервером Apache перед сервером Apache Tomcat.

Моя цель: отключить http-методы DELETE а также PUT на веб-сервере.

Согласно OWASP ( https://www.owasp.org/index.php/Test_HTTP_Methods_(OTG-CONFIG-006)) это следует проверить с помощью этой команды:

nmap -p 80 --script http-methods www.example.com

На моем сервере я получаю этот ответ:

PORT   STATE SERVICE
80/tcp open  http
| http-methods:
|   Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_  Potentially risky methods: PUT DELETE

Согласно http://www.techstacks.com/howto/disable-http-methods-in-tomcat.html я могу отключить PUT и DELETE с помощью этих строк в web.xml

<security-constraint>
     <web-resource-collection>
          <web-resource-name>restricted methods</web-resource-name>
          <url-pattern>/*</url-pattern>
          <http-method>PUT</http-method>
          <http-method>DELETE</http-method>
     </web-resource-collection>
     <auth-constraint />
</security-constraint>

Если я добавлю это, мой ответ по-прежнему Supported Methods: GET HEAD POST PUT DELETE OPTIONS,
Если я дополнительно отключу http-метод OPTIONS с добавлением <http-method>OPTIONS</http-method> на web.xml, тогда я получаю хороший ответ:

80/tcp open  http
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS

То же самое происходит, если я пытаюсь отключить те http-методы на веб-сервере Apache, который на самом деле находится перед котом. см.: http://www.techstacks.com/howto/disable-http-methods-in-apache.html

Что я хочу:

  • запрещать PUT а также DELETE
  • Не отключать OPTIONS
  • nmap -p 80 --script http-methods www.example.com должен ответить, что DELETE а также PUT отключены

1 ответ

Решение

Скрипт отправляет OPTIONS запросить и сообщить результаты. Это сообщает, какие методы поддерживает серверное программное обеспечение. Ваша конфигурация безопасности не меняет методы, которые понимает Tomcat; это добавляет ограничение безопасности, что эти методы разрешены только для пользователей, которые соответствуют auth-constraint условие, которое в этом случае не содержит пользователей. Так что Tomcat правдив: он понимает PUT а также DELETE, даже если никто не имеет права использовать их.

Если вы хотите получить дополнительное подтверждение, вы можете добавить --script-args http-methods.retest к вашей команде. Это даст указание сценарию отправить запрос каждым из обнаруженных методов и сообщить код состояния ответа. Но будьте осторожны: это приведет к отправке запросов как DELETE /, который может быть вредным.

Другие вопросы по тегам