Запрос блока IIS 8 по полям полезной нагрузки JSON

У меня есть веб-сервер MVC.NET 4, который принимает запрос HTTP POST с форматированной строкой JSON в качестве данных запроса. Я хотел бы добавить правило на уровне IIS до того, как запрос попадет на сервер, чтобы заблокировать запрос некоторым регулярным выражением в этой строке JSON. Возможно ли это?

Ответ 1

Я думаю, что создание и добавление настраиваемого Http-модуля может решить вашу проблему. HTTP-модуль вызывается для каждого запроса в ответ на события BeginRequest и EndRequest.

Ответ 2

Так как вы сказали:

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

У вас есть 2 варианта:

  • Фильтрация запросов
  • Перенаправление URL

Изучите IIS 7.0 Request Filtering и URL Rewriting, чтобы узнать самые важные вещи о них. Если ваш выбор будет первым с наивысшим приоритетом, <denyQueryStringSequences> будет полезен там, где он охватывает некоторые требования к фильтрации. И для работы с регулярным выражением вам нужно использовать второй. следующее правило выборки может прекратить обработку запроса в <rewrite>:

<rule name="Block Bad Request Strings" stopProcessing="true">
     <match url=".*" />
     <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{QUERY_STRING}" pattern="id=([^\"]*[^-]?>)|(?:[^\\w\\s]\\s*\\\/>)|(?:>\") />
     </conditions>
     <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission" />
</rule>

Для получения дополнительной информации см. Ссылка на настройку URL-адреса URL-адреса