Как закрыть HTTP-соединение в asp.net? - PullRequest
0 голосов
/ 30 марта 2011

У меня проблема, пожалуйста, помогите!

Недавно наш сайт подвергся атаке медленного HTTP POST DOS. Это когда ваш сервер получает много входящих соединений и сохраняет их в течение длительного времени, потому что отправитель отправляет информацию очень медленно, и сервер не может удовлетворить запрос реальных пользователей - отказ в обслуживании.

Поэтому я решил отклонить такие POST-запросы:

void Application_BeginRequest(object sender, EventArgs e)
{
    if ( _my_condition_here_ )
    {
        _reject_the_request_by_dropping_connection_
    }
}

Проблема в том, что я не могу сбросить HTTP-соединение в asp.net:

Response.End(), throw new Exception(), even Thread.CurrentThread.Abort() 

не закрывать соединение. Он ждет, пока отправитель отправит все фальшивые данные, а затем ответит «500 ошибка сервера» или что-то в этом роде. Медленная POST-атака в этом случае все равно будет успешной.

Как я могу просто сбросить соединение? Или, может быть, есть некоторые настройки или модули в IIS 7, которые могут сделать это для меня?

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Попробуйте Response.Close вместо Response.End. Смотрите также проверенный ответ этой ТА темы .

0 голосов
/ 30 марта 2011

Рассматривали ли вы вместо этого уменьшение времени ожидания соединения?

0 голосов
/ 30 марта 2011

Вы можете проверить Фильтрация запросов IIS7. Просто не знаю, может ли ваше «условие» быть реализовано таким образом, чтобы была возможна фильтрация запросов. Ofcourse IP Security вариант, но не очень элегантный. Нет ли Forefront TMG (или другого брандмауэра) перед веб-сервером? Если это так, вы можете добавить некоторую защиту в брандмауэр.

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

...