Я запускаю веб-сервер с 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, который на самом деле находится перед tomcat. видеть: 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
отключеныСкрипт отправляет OPTIONS
запросить и сообщить результаты. Это сообщает, какие методы серверное программное обеспечение поддерживает. Ваша конфигурация безопасности не меняет методы, которые понимает Tomcat; это добавляет ограничение безопасности, что эти методы разрешены только для пользователей, которые соответствуют auth-constraint
условие, которое в данном случае не содержит пользователей. Итак, Tomcat правдив: это делает понять PUT
и DELETE
, даже если никому не разрешено их использовать.
Если вам нужно дополнительное подтверждение, вы можете добавить --script-args http-methods.retest
к вашей команде. Это даст указание сценарию отправить запрос с каждым из обнаруженных методов и сообщить код состояния ответа. Но будьте осторожны: это воля приводит к отправке запросов типа DELETE /
, что может быть вредно.