Проверить запрос перед Application_BeginRequest? - PullRequest
1 голос
/ 02 января 2012

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

Возможно ли это?

[Update]

Я сосредоточен на предотвращении уязвимости нулевого дня, которая возникает до BeginRequest и не перехватывается проверкой ASP .net.

Если бы я мог контролировать создание объекта HttpWebRequest, я мог бы обнаружить эту атаку.

[Решение]

Это можно решить с помощью собственного модуля.

Информация о создании собственного модуля может быть найдена здесь (с использованием C ++): http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis/

Уязвимость нулевого дня, о которой я говорил, описана в этой записи блога: http://blogs.technet.com/b/srd/archive/2011/12/27/more-information-about-the-december-2011-asp-net-vulnerability.aspx

Я сделал исправление для него (это предварительная версия, не подходит для производства), и его можно найти на GitHub: https://github.com/ginx/HashCollisionDetector

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 02 января 2012

BeginRequest - это первое событие в конвейере обработки запросов IIS.

Единственными действиями перед запросом, которые происходят перед этим событием, являются создание экземпляров HttpContext, HttpRequest и HttpResponse классы.

Также бывает, что событие BeginRequest в некоторых зарегистрированных HttpModules (включая Global.asax) будет выполняться раньше других.Тем не менее, ASP.NET не дает никаких гарантий в отношении заказа.

0 голосов
/ 22 февраля 2014

Это можно решить с помощью собственного модуля.

Собственный модуль выполняется перед любой проверкой ASP .net.

Информация о создании собственного модуля может быть найдена здесь (с использованием C ++): http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis/

0 голосов
/ 02 января 2012

Вы можете попросить HttpApplication сделать это за вас, установив страницы validateRequest = "true" в вашем web.config.

В противном случае вы можете попытаться заменить некоторые стандартные модули.в конвейере IIS (не рекомендуется, если у вас много времени).

Вот несколько очень полезных ресурсов:

Обзор жизненного цикла приложений ASP.NET для IIS 7.0

Обзор модулей IIS 7

Настройка ролей и модулей IIS 7.0

...