Блочные боты с IIS 7.5 и 8.0

11

Я хотел бы заблокировать бот с IIS. С помощью Apache вы можете добавить команду в свой файл .htaccess, как описано здесь . Как бы это сделать с IIS 7.5?

Обновить

В дополнение к ответу ниже, есть всего несколько подходов, которые я обнаружил после публикации этого вопроса:

  1. Опция сканирования URL указана в принятом ответе.
  2. Определите правило фильтрации запросов (пример ниже)
  3. Определите правило перезаписи URL (пример ниже)

Правило фильтра запросов

 <system.webServer>
    <security>
      <requestFiltering>
        <filteringRules>
          <filteringRule name="BlockSearchEngines" scanUrl="false" scanQueryString="false">
            <scanHeaders>
              <clear />
              <add requestHeader="User-Agent" />
            </scanHeaders>
            <appliesTo>
              <clear />
            </appliesTo>
            <denyStrings>
              <clear />
              <add string="YandexBot" />
            </denyStrings>
          </filteringRule>
        </filteringRules>
      </requestFiltering>
    </security>
    [...]
 </system.webServer>

Правило перезаписи URL

<rule name="RequestBlockingRule1" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <conditions>
                        <add input="{HTTP_USER_AGENT}" pattern="YandexBot" />
                    </conditions>
                    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="Get Lost." />
                </rule>

Для моего последнего проекта я остановился на варианте 2, так как он ориентирован на безопасность и основан на интегрированном сканировании URL, встроенном в IIS 7.

мистифицировать
источник

Ответы:

4

Обычно вы используете robots.txt. Это будет работать на всех хороших ботах.

Для ботов, которые плохо себя ведут, часто мало что можно сделать. Вы можете ограничить количество подключений или пропускную способность в брандмауэре или веб-сервере, но основные боты обычно используют несколько IP-адресов. Ограничение, основанное на строках пользовательского агента, обычно не является хорошей идеей, поскольку для бота подделка тривиальна, и боты, которые не заботятся о robots.txt, также имеют тенденцию подделывать строки userragent. Это работает в конкретном случае, когда бот отправляет правильный пользовательский агент, но не подчиняется robots.txt.

Изменить: Если вы действительно хотите заблокировать на основе useragent, а не выдвигать его обратно на брандмауэр или что-то подобное, я думаю, что самый простой способ - использовать URLScan. Вы пишете правило, которое выглядит примерно так:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
pehrs
источник
2
Я пытаюсь заблокировать Яндекс, который игнорирует robots.txt, но постоянно имеет Яндекс в пользовательском агенте.
Джош
11

Я знаю, что это старый вопрос, но в IIS 7.5 вы можете отказать пользовательскому агенту, если вы используете фильтрацию запросов.

В IIS перейдите на веб-сайт, к которому вы хотите применить фильтр, а затем на правой панели щелкните значок « Фильтрация запросов» . (возможно, вам придется включить эту функцию через диспетчер серверов).

Перейдите на вкладку « Правила », а затем в дальнем правом списке выберите «Добавить правило фильтрации».

Дайте ему имя, а затем в разделе « Заголовки сканирования» введите «User-Agent».

Вы можете добавить любой конкретный тип (типы) файлов для блокировки в разделе «Применяется к» или оставить его пустым, чтобы он применялся ко всем типам файлов.

В поле « Запретить строки» введите все строки пользовательских агентов, которые вы хотите заблокировать. В случае этого вопроса, вы бы поставили «Яндекс» здесь.

Я подтвердил эти изменения в Chrome, используя расширение User Agent Switcher .

мистифицировать
источник
6

Для сканеров, которые не уважают Robots.txt, вы можете использовать URL Rewrite на сервере для блокировки на основе их пользовательского агента, см. Http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- блок-сканеры /

Вот простой способ заблокировать основные веб-сканеры - Google Bing и Yahoo - от индексации любого сайта на всем сервере. Это действительно полезно, если вы помещаете все свои бета-версии на общедоступный сервер, но пока не хотите, чтобы они были проиндексированы поисковыми системами.

  1. Установите модуль перезаписи URL IIS.

  2. На уровне сервера добавьте правило блокировки запросов. Заблокируйте заголовки пользовательских агентов, соответствующие регулярному выражению: googlebot | msnbot | slurp.

Или просто вставьте это правило в «C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config»

<system.webServer>
   <rewrite>
      <globalRules>
         <rule name="RequestBlockingRule1" stopProcessing="true">
            <match url=".*" />
            <conditions>
               <add input="{HTTP_USER_AGENT}" pattern="googlebot|msnbot|slurp" />
            </conditions>
            <action type="CustomResponse" statusCode="403"
               statusReason="Forbidden: Access is denied."
               statusDescription="You do not have permission to view this page." />
         </rule>
      </globalRules>
   </rewrite>
</system.webServer>

Это заблокирует Google, Bing и Yahoo от индексации любого сайта, опубликованного на сервере. Чтобы проверить это, попробуйте Firefox User Agent Switcher .

Для получения дополнительной информации: http://www.iis.net/download/URLRewrite

Карлос Агилар Марес
источник
Я не уверен, что рекомендовать обновить applicationHost.config для добавления правил перезаписи - хорошая идея - не должны ли они просто войти в web.config?
Blakomen
С 2016 года также есть: saotn.org/hackrepair-bad-bots-htaccess-web-config-iis
Dawesi