EnableHeaderChecking=true достаточно для предотвращения нападений Инжекции Заголовка Http?

Существует бесплатное приложение для iPhone под названием «Шрифты», которое отображает все установленные шрифты. (Чтобы загрузить его, щелкните эту ссылку iTunes .)

Но обратите внимание, что шрифты, установленные на вашем персональном iPhone или симуляторе, могут не совпадать с набором шрифтов, установленных на других устройствах.

10
задан Michael Donohue 10 December 2009 в 13:31
поделиться

4 ответа

Я смотрел на это некоторое время и пришел к выводу, что установка EnableHeaderChecking на true на самом деле достаточно хороша, чтобы предотвратить http атаки путем внедрения заголовков.

Глядя на «отраженный» код ASP.NET, я обнаружил, что:

  1. Существует только один способ добавить пользовательские заголовки HTTP в ответ HTTP, а именно использовать HttpResponse.AppendHeader ] метод
  2. HttpResponse.AppendHeader либо
    • создает экземпляры HttpResponseHeader (внутренний)
    • или вызывает HttpResponseHeader.MaybeEncodeHeader (для IIS7WorkerRequests или присваивает его соответствующие свойства ) [его соответствующие свойства] известные заголовки, такие как RedirectLocation или ContentType )
  3. HttpResponseHeader , создаются до того, как будут отправлены известные заголовки, такие как RedirectLocation или ContentType ContentType ( HttpResponse.GenerateResponseHeaders )
  4. Конструктор HttpResponseHeader проверяет настройку EnableheaderChecking и вызывает HttpResponseHeader 1149267] Http49.eader для Http49.esponse26. истина
  5. HttpResponseHeader.MaybeEncodeHeader правильно кодирует символы новой строки, что делает невозможными атаки с использованием HTTP-заголовков

Вот фрагмент, примерно демонстрирующий, как я тестировал:

// simple http response splitting attack
Response.AddHeader("foo", "bar\n" + 
    // injected http response, bad if user provided
    "HTTP/1.1 200 OK\n" + 
    "Content-Length: 19\n" +
    "Content-Type: text/html\n\n" +
    "<html>danger</html>"
);

Вышеупомянутое работает, только если вы явно отключите EnableHeaderChecking :

<httpRuntime enableHeaderChecking="false"/>

Fortify просто не принимает во внимание конфигурацию (настройка EnableHeaderChecking явно не действует), и поэтому всегда сообщает о подобных проблемах.

7
ответ дан 4 December 2019 в 02:27
поделиться

Насколько мне известно, этого достаточно, и он должен быть включен по умолчанию.

Я думаю, что Fortify просто думает о глубокой защите, как если бы вы изменили конфигурацию в развертывании и т.д.

I Предположим, вы не установили его строго в своей конфигурации, если у вас, возможно, Fortify не настолько умен, чтобы понять, что наш.

Лучший способ подтвердить - использовать его :)

  • Просто получите копию fiddler
  • Перехватите запрос
  • Попробуйте ввести новую строку
  • Посмотрите, есть ли новая строка, которую вы только что вставили, в HTTP-ответе или нет.
1
ответ дан 4 December 2019 в 02:27
поделиться

EnableHeaderChecking предназначен только для ненадежных данных. Если вы передаете данные непосредственно из cookie в Redirect, возможно, результирующие заголовки считаются надежными и значения \ r \ n не экранируются.

0
ответ дан 4 December 2019 в 02:27
поделиться

Йозеф, HttpResponse.AppendHeader() - не единственное место, где недоверенные данные могут попасть в заголовки HTTP-ответа.

Любые данные от злоумышленника, которые оказываются в Cookies или HTTP-перенаправлениях, могут записать новые заголовки, если эти данные содержат возврат каретки (или что-либо, что интерпретируется как возврат каретки).

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

0
ответ дан 4 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: