ASP.NET MVC3 - что вы делаете с проверочными запросами? - PullRequest
8 голосов
/ 14 ноября 2011

наш сайт вышел в онлайн и, конечно, мы начали получать множество пробных запросов, как

/ блог / WP-login.php '
«/admin/admin.php'

и т.д.
Вопрос в том, что вы с ними делаете?

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

Как сделать так, чтобы такие запросы минимально загружали сервер, может быть возможно, что конвейер asp.net не был бы вовлечен в такие запросы?
Или лучше перенаправить или вернуть пустой результат?

Если для этого потребуется просто добавить IgnoreRoutes, может, у кого-то есть хороший набор маршрутов, который будет игнорировать большинство проверочных запросов?

Ответы [ 3 ]

10 голосов
/ 15 ноября 2011

Я знаю, что вы заявили, что не хотите использовать модуль перезаписи в IIS, поскольку он «добавляет дополнительную нагрузку на IIS», но на самом деле использование IIS для их обработки будет менее интенсивным, чем переход в ваше приложение.сделать то же самое (хотя оба они чрезвычайно малы по ресурсам).Если вы хотите проигнорировать запрос с минимальной нагрузкой на IIS и пропускную способность, я бы предложил следующее

<rewrite>
  <rules>
    <rule name="Fail PHP requests">
      <match url=".*"/>
      <conditions>
        <add input="{URL}" pattern="*.php*" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
   </rules>
</rewrite>

Это перезапись с типом действия, установленным в AbortRequest, полностью разрывает HTTP-соединение и сбрасываетзапрос, ошибки 404 или 403 не возвращены.Взято из Изучите IIS в разделе «Создание блока доступа».

РЕДАКТИРОВАТЬ - Поскольку у ОП есть проблемы с использованием модуля перезаписи и производительности, яЯ собираюсь представить второй вариант, который все еще может перехватить запрос .php без использования модуля перезаписи.IIS7 и более поздние версии также поддерживают фильтрацию запросов и, согласно Learn IIS, фильтрация запросов ... ... 1010 *

Модуль фильтрации запросов запускается в начале конвейера обработки запросов путем обработки события BeginRequest.Модуль оценивает метаданные запроса, такие как заголовки, строка запроса, длина содержимого и т. Д., Чтобы определить, соответствуют ли метаданные запроса какому-либо существующему фильтру.Если есть совпадение, модуль генерирует ответ 404 (файл не найден), а затем сокращает оставшуюся часть конвейера IIS

Для реализации добавьте следующий раздел в ваш web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <fileExtensions allowUnlisted="true" >
     <add fileExtension=".php" allowed="false"/>
    </fileExtensions>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Информация от Перезапись URL-адреса против фильтрации запросов и Использование фильтрации запросов

3 голосов
/ 14 ноября 2011

Это то, что я использовал в одном из моих проектов в web.config с PHP как субприложение:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="ignorePhp" patternSyntax="Wildcard">
                <match url="*" />
                <conditions>
                    <add input="{URL}" pattern="*.php*" />
                </conditions>
                <action type="CustomResponse" statusCode="403" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

ОБНОВЛЕНИЕ

Вы также можете посмотреть1008 * этот пост тоже

1 голос
/ 14 ноября 2011

Вы можете взглянуть на следующую статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...