2010-02-10 2 views
2

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

Однако совет также предположил, что попытки скомпрометировать безопасность с помощью таких средств, как вставка тега в случайную строку запроса, вызывающую проверку запроса ASP.NET для запуска или манипулирования видовым состоянием, также не должны возвращать HTTP 500. Очевидно, что родная структура поведение заключается в том, чтобы интерпретировать запрос и, возможно, переходить на страницу пользовательских ошибок, но даже это вернет 500 ответов.

Поэтому я размышляю над тем, как подойти к этому. Есть ли способ настроить приложение на уровне .NET или IIS, чтобы вернуть HTTP 200, когда поднят 500? Или это станет упражнением по кодированию на уровне global.asax в одном из событий приложения? Есть ли другие последствия для рассмотрения?

BTW, обоснование со стороны безопасности заключается в том, что приложения, которые возвращают HTTP 500, могут рассматриваться как «низко висящие фрукты» ботами, случайным образом сканирующими на наличие уязвимостей и вызывающими дальнейшую злонамеренную деятельность. Я лично не убежден, что изменение кодов ответов дает любые реальные выгоды в области безопасности, но я рад помочь советам профессионалов.

+1

Как никогда не бросать код ошибки 500, чтобы вы стали более безопасным? Не звучите правильно, если вы не вставляете информацию об отладке на страницу с ошибкой. – Schwern

+0

Я говорю о приложениях с настраиваемыми ошибками и не обнаруживаются данные отладки или трассировки. Как я уже сказал выше, позиция заключается не в том, что она делает приложение более безопасным, а скорее, что делает его менее заметным в качестве потенциального кандидата для попыток вторжения. –

+0

Существует множество других советов о том, какое приложение вы используете, помимо страницы с ошибкой (шаблоны url, имена полей формы, стили HTML, пользовательские заголовки HTTP ...), поэтому я не знаю, насколько реальное значение безопасности подавляет пользовательский интерфейс приложения ошибка страница есть. Даже если вы скрываете приложение, которое используете, его просто обфускация. Конечно, «все возможные меры» не должны приниматься и, конечно же, не должны лгать клиенту о наличии ошибки. У MarkR есть лучший ответ, создайте общую, статичную страницу с ошибками 500 сайтов, такую ​​как щебетать кита Twitter или гневный единорог Гитуба. – Schwern

ответ

4

Чтобы ответить на ваш вопрос: global.asax правильное место, в частности, обработчик событий Application_Error. Вы должны быть в состоянии сделать что-то вроде

Response.StatusCode = 200 
Response.StatusDescription = "OK" 

есть.

PS: Не делайте этого. :-) Для меня это звучит как еще один подход, основанный на стандарте безопасности по сравнению с нарушением стандартов. Я действительно не думаю, что (возможно, маргинальное) повышение безопасности стоит нарушить правильное поведение HTTP (подумайте о Google, индексируя страницы ошибок и т. Д.).

+0

Я отметил это как правильный ответ, потому что, хотя я согласен с другими ответами, поскольку это то, что не должно быть сделано, Хайнци - единственный, кто действительно ответил на исходный вопрос. –

4

Почему? Отправка кода 500 без какой-либо другой информации не дает злоумышленнику много информации.

Если вы не выбрали трассировку стека, состояние дампов и т. Д., Вернитесь к клиенту, тогда вы в порядке. И я очень сомневаюсь, что вы хотите это сделать.

Серьезно, просто создайте страницу «500» (изображение кита необязательно) и верните, что с вашим статусом 500 - ничего не дает.

Отправка статуса 200, когда страница НЕ была сгенерирована успешно, является неправильной и может привести к возникновению плохих вещей - например, боты, думающие, что это настоящая страница. Вы не хотите, чтобы ваша страница «500 ошибок» отображалась в Google, потому что вместо этого вы отправили обратно статус 200.

+0

Спасибо, Марк, как я уже сказал, у меня такие же проблемы и, вероятно, попытаюсь договориться об этом, но на данном этапе мне просто нужен фактический метод реализации. –

1

Вы можете установить пользовательские страницы ошибок в конфигурации - и вы можете повторно установить статус ответа в пользовательской ошибки страницы

<customErrors mode="On" defaultRedirect="~/DefaultErrorPage.htm" > 
    <error statusCode="500" redirect="~/CustomError.aspx"/> 
</customErrors> 

серьезное предупреждение ...!

Убедитесь, что ошибок нет на вашей странице ошибок. Обычно вы используете страницу html, а не страницу aspx, но если вы хотите изменить заголовки ответов, вам может понадобиться использовать страницу aspx. Не делайте ничего другого там, кроме изменения заголовков (т. Е. Не отображать данные из базы данных или пытаться запустить какую-либо логику), а ошибка на вашей странице пользовательских ошибок приведет к ошибке «максимальное количество переадресаций».

+0

Спасибо Sohnee, но ваш пример определяет только страницу ошибок для маршрутизации на основе состояния HTTP. Это никоим образом не изменяет код. –

Смежные вопросы