Подтвердить что ты не робот

Сокращение раскрытия информации на страницах ошибок Tomcat

По умолчанию страницы ошибок Tomcat раскрывают как наличие Tomcat, так и точную версию контейнера, который обрабатывает запросы. Это хорошо для разработки, но в производственном контексте эта информация является потенциальной дырой в безопасности, и было бы неплохо ее отключить.

Таким образом, я хотел бы знать, какое лучшее (как в большинстве простых/всеобъемлющих) решение - полностью подавить страницы ошибки по умолчанию Tomcat. Я знаю параметр <error-page> в web.xml, но он, кажется, терпит неудачу в обоих желаемых подсчетах, отчасти потому, что мне пришлось бы перечислить одну и ту же страницу альтернативной ошибки много раз (по одному для каждого кода ответа, который я хочу обработать) и потому что это поражает меня, возможно, не на 100% надежным; если злоумышленник может каким-то образом вернуть код ошибки, который я явно не указал, он получит страницу с ошибкой по умолчанию.

В идеале, простой вариант установки универсальной страницы пользовательских ошибок или для отказа от отправки любой HTML вместе с кодом ошибки на странице ошибок по умолчанию будет лучше. Если ни один из этих вариантов невозможен, мне было бы интересно узнать, какой типичный способ реализовать эту функциональность (бонусные баллы за обсуждение/показ того, почему эти гипотетические варианты не существуют, поскольку, похоже, мое требование будет вполне стандартным для тех, кто использует Tomcat в производстве...).

4b9b3361

Ответ 1

<error-page> - правильный ответ, но вы не хотите просто перенаправлять все коды ошибок на какое-то общее сообщение. Вы должны думать о том, как вы хотите обрабатывать каждую ошибку. Если вы боитесь, что можете пропустить один из кодов, проверьте константы в интерфейсе HttpServletResponse.

Ответ 2

Некоторые ошибки отправляются непосредственно контейнером, и ваше приложение не имеет возможности справиться с ними. Например, когда запрашивается несуществующий ресурс, будет отправлена ​​ошибка 404. Единственное, что может сделать ваше приложение, это объявить соответствующую запись <error-page> в файле web.xml.

Я согласен с Джереми Штайн, что правильный ответ <error-page>. Ведь коды ошибок не являются неограниченными.

Прочитайте также обсуждение здесь, о том, как обрабатываются ошибки с помощью Spring MVC. Я считаю, что наиболее важно обращаться с вашими собственными ошибками (исключения, которые, если их не поймают, приведут к ошибке внутреннего внутреннего сервера).

Ответ 3

Я согласен с Джереми Штайн, что < error-page > это ответ, однако я бы хотел добавить 2 очка:

  • Вы должны поместить страницу < error-page > в файле CATALINA_HOME/conf/web.xml, в дополнение к файлу приложения web.xml, если хакер пытается получить доступ к URL-адресу в других веб-приложениях, таких как установленный по умолчанию "менеджер", "tomcat", примеры "и т.д.

  • Если вы хотите защитить сервер (очевидно) не так просто, как заботиться об этих страницах ошибок. Эта ссылка содержит список вещей, которые вам нужно сделать:

https://www.owasp.org/index.php/Securing_tomcat

Ответ 4

Возможная опция - установить Сервлет-фильтр, который может перенаправить страницы ошибок на нужную вам страницу... Вы бы только один раз это код, и это будет работать для всех ошибок коды..

Ответ 5

Самый простой и исчерпывающий способ сделать это - использовать ErrorReportValve - просто добавьте следующие строки в раздел Host вашего файла server.xml(где у вас уже должен быть AccessLogValve:

<Valve className="org.apache.catalina.valves.ErrorReportValve"
    showReport="false" 
    showServerInfo="false"/>    

Таким образом вы скрываете информацию о сервере и (из-за необязательного showReport = false) также отслеживаете стеки.

Подробнее об этом можно узнать в "Безопасность как" и в документации Отчет об ошибках.