Сокращение раскрытия информации на страницах ошибок Tomcat - PullRequest
11 голосов
/ 05 октября 2009

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

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

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

Ответы [ 5 ]

6 голосов
/ 05 октября 2009

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

3 голосов
/ 03 ноября 2016

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

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

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

Подробнее об этом можно прочитать в Security How To и в документации к Valve Report Valve .

3 голосов
/ 07 сентября 2011

Я согласен с Джереми Стейном, что является ответом, однако я хотел бы добавить 2 пункта:

  1. Вы должны поместить запись в файл CATALINA_HOME / conf / web.xml в дополнение к файлу web.xml приложения на случай, если хакер попытается получить доступ к URL-адресам в других веб-приложениях например, установленный по умолчанию 'manager', 'tomcat', 'examples' и т. д.

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

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

3 голосов
/ 06 октября 2009

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

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

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

2 голосов
/ 05 октября 2009

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

...