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