Веб-сервер 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 /
, который может быть вредным.