Вопрос: Как отключить отправку нескольких форм (POST) в IIS


У нас было значительное перебои в работе с SharePoint несколько месяцев назад, потому что пользователь вклинил свою клавиатуру таким образом, чтобы нажимать кнопку Enter на неопределенное время. Пользователь находился на странице поиска персонализированного пользователя, и сотни POST одного пользователя были представлены асинхронно, что перегрузило сервер.

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

Есть ли способ предотвратить множественные представления веб-форм общим пользователем в течение короткого периода времени в IIS?

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

Обновить: Кажется, глядя на исходный код, javascript выполняет document.location = url, всякий раз, когда нажимается код ключа 13 (Enter). Опять же, мы можем написать JS, чтобы предотвратить это в этом месте, но мы также хотим быть в состоянии защитить от такого рода проблемы в целом ... желательно на уровне IIS.


7
2017-10-29 16:30


Источник


Добавить JavaScript на каждую страницу? - Michael Hampton♦
Спасибо за комментарий, но, к сожалению, наша ферма SharePoint очень большая, где есть много разработчиков, которые пишут собственный код. Мы надеемся на решение более низкого уровня в IIS. - user1209640
Улучшено ли обучение пользователей? - Michael Hampton♦
Я удивлен, что на веб-сервере, таком как IIS, не будет ничего доступного, тем более, что есть много провайдеров сообщества, обслуживающих ASP.Net для общедоступного Интернета, и насколько легко может разработчик написать ошибочный javascript, который может непреднамеренно удалить сервер. Я думаю, что проблема, которую я описываю, может быть сродни случайной атаке DDOS. - user1209640
Вам нужно будет найти способ блокировать больше, чем «x» соединения с одного IP-адреса. Где x больше, чем количество одновременных соединений, обычно используемых для стандартного запроса с некоторым дополнительным буфером (или, вероятно, вы просто утроите число для безопасности). Вероятно, вам нужно будет использовать какое-то устройство межсетевого экрана между конечными пользователями и серверами SharePoint ... защита от наводнений - это то, что называют некоторые брандмауэры. - Ashley Steel


Ответы:


Одним из вариантов этого было бы ограничение скорости, используя что-то вроде http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions который может быть установлен для блокировки нарушающего IP в течение установленного промежутка времени.

Вы хотите, чтобы исходные типичные запросы / second / IP, прежде чем вводить что-то подобное в производство, конечно, но это должно помешать единственному пользователю снова сделать что-то подобное.


2
2017-11-26 14:14





Если проблема просто устраняет влияние из-за количества одновременных запросов, есть дополнение для IIS 7, Dynamic IP Restrictions. (Эта возможность теперь встроена в IIS8). Можно настроить это для режима только для журнала, чтобы определить, что, если какое-либо влияние было бы до включения возможности.

http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions 

  • Полная интеграция в IIS 7.0 Manager.
  • Динамическое блокирование запросов с IP-адреса по одному из следующих критериев:
    • Количество одновременных запросов.
    • Количество запросов в течение определенного периода времени.
  • Поддержка списка IP-адресов, которым разрешено обходить фильтрацию динамического IP-ограничения.
  • Блокирование запросов можно настроить на уровне веб-сайта или веб-сервера.
  • Настраиваемые действия запрета позволяют ИТ-администраторам указывать, какой ответ будет возвращен клиенту. Модуль поддерживает коды статуса возврата 403, 404 или закрывает соединение.
  • Поддержка адресов IPv6.
  • Поддержка веб-серверов за прокси-сервером или межсетевым экраном, которые могут изменять IP-адрес клиента.

Dynamic IP Restrictions in action 

Подача нескольких форм должна быть рассмотрена на уровне приложения. Его можно легко реализовать с помощью мастер-страниц. Следующий jquery на главной странице делает трюк для всех дочерних страниц контента:

$("form").submit(function () {
    $(":submit", this).attr("disabled", "disabled");
});  

Другая хорошая практика, которая может стоить принять: Post / Redirect / Get

http://en.wikipedia.org/wiki/Post/Redirect/Get 


2
2017-12-29 20:16





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

class CGlobalTestFilterModule:public CGlobalModule
{
public:
    GLOBAL_NOTIFICATION_STATUS 
        OnGlobalPreBeginRequest(IN IPreBeginRequestProvider * pProvider)
    {
    ...
   }
...
}

вот хорошее руководство по внедрению модулей IIS: http://www.iis.net/learn/develop/runtime-extensibility/develop-a-native-cc-module-for-iis вы можете выбрать управляемые модули, если вы более знакомы с .NET.


0
2017-12-07 17:27



Возможно, вы можете найти готовый к использованию модуль в списке расширений IIS 7: iis.net/downloads/category/handle-requests - hassan.monfared