Вопрос или проблема
Вопрос для новичков: я пытаюсь создать белый список хороших ботов для моего файла apache htaccess, потому что не имею достаточного времени для поддержания постоянно расширяющегося черного списка плохих ботов.
Тем не менее, я хочу быть осторожным и не блокировать легитимных посетителей, поисковые системы, браузеры или ботов. Поэтому я создал следующий код htaccess с помощью ИИ. Заблокирует ли он какой-либо легитимный трафик? Заблокирует ли он плохих ботов?
Я понимаю, что мне придется время от времени обновлять это, чтобы включить любые новые легитимные источники трафика.
(Обратите внимание, что я планирую исключить код sql-injection, так как я уже заблокировал это с помощью кода в своих веб-формах.)
Буду признателен за любые советы. Спасибо!
Вот код:
# Включить RewriteEngine
RewriteEngine On
# Заголовки безопасности
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
Header set Referrer-Policy "strict-origin-when-cross-origin"
# Запретить перечисление каталогов
Options -Indexes
# Белый список: разрешить все известные браузеры, поисковые системы и хорошие боты
## Разрешить все известные браузеры
RewriteCond %{HTTP_USER_AGENT} ^.*Mozilla.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Opera.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*OPR.* [NC,OR] # Новый UA Opera
RewriteCond %{HTTP_USER_AGENT} ^.*Msie.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Firefox.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*FxiOS.* [NC,OR] # Firefox для iOS
RewriteCond %{HTTP_USER_AGENT} ^.*Netscape.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Safari.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Edge.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Edg.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Chrome.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*CriOS.* [NC,OR] # Chrome для iOS
RewriteCond %{HTTP_USER_AGENT} ^.*Brave.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Vivaldi.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Seamonkey.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Konqueror.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Iceweasel.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*UCBrowser.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Maxthon.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*YaBrowser.* [NC,OR] # Яндекс Браузер
RewriteCond %{HTTP_USER_AGENT} ^.*Midori.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Avant.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*QQBrowser.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*CocCoc.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Sogou.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Baidu.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*SamsungBrowser.* [NC,OR] # Браузер Samsung
RewriteCond %{HTTP_USER_AGENT} ^.*MiuiBrowser.* [NC,OR] # Браузер Xiaomi
## Разрешить все известные боты поисковых систем
RewriteCond %{HTTP_USER_AGENT} ^.*Googlebot.* [NC,OR] # Google
RewriteCond %{HTTP_USER_AGENT} ^.*Bingbot.* [NC,OR] # Bing
RewriteCond %{HTTP_USER_AGENT} ^.*Slurp.* [NC,OR] # Yahoo
RewriteCond %{HTTP_USER_AGENT} ^.*DuckDuckBot.* [NC,OR] # DuckDuckGo
RewriteCond %{HTTP_USER_AGENT} ^.*YandexBot.* [NC,OR] # Яндекс
RewriteCond %{HTTP_USER_AGENT} ^.*Exabot.* [NC,OR] # Exalead
RewriteCond %{HTTP_USER_AGENT} ^.*facebot.* [NC,OR] # Facebook
RewriteCond %{HTTP_USER_AGENT} ^.*ia_archiver.* [NC,OR] # Internet Archive
RewriteCond %{HTTP_USER_AGENT} ^.*AhrefsBot.* [NC,OR] # Ahrefs
RewriteCond %{HTTP_USER_AGENT} ^.*SemrushBot.* [NC,OR] # SEMrush
RewriteCond %{HTTP_USER_AGENT} ^.*BLEXBot.* [NC,OR] # BLEXBot
RewriteCond %{HTTP_USER_AGENT} ^.*DotBot.* [NC,OR] # Dotbot
RewriteCond %{HTTP_USER_AGENT} ^.*Mediapartners-Google.* [NC,OR] # Google AdSense
RewriteCond %{HTTP_USER_AGENT} ^.*Baiduspider.* [NC,OR] # Baidu
RewriteCond %{HTTP_USER_AGENT} ^.*MojeekBot.* [NC,OR] # Mojeek
RewriteCond %{HTTP_USER_AGENT} ^.*PetalBot.* [NC,OR] # Huawei Search
RewriteCond %{HTTP_USER_AGENT} ^.*Mail.RU_Bot.* [NC,OR] # Mail.ru
RewriteCond %{HTTP_USER_AGENT} ^.*GibiruBot.* [NC,OR] # Gibiru
RewriteCond %{HTTP_USER_AGENT} ^.*Gigabot.* [NC,OR] # Gigablast
RewriteCond %{HTTP_USER_AGENT} ^.*BraveBot.* [NC,OR] # Brave Search
RewriteCond %{HTTP_USER_AGENT} ^.*QwantBot.* [NC,OR] # Qwant
RewriteCond %{HTTP_USER_AGENT} ^.*StartpageBot.* [NC,OR] # Startpage
RewriteCond %{HTTP_USER_AGENT} ^.*EcosiaBot.* [NC,OR] # Ecosia
RewriteCond %{HTTP_USER_AGENT} ^.*SwiftBot.* [NC,OR] # Swisscows
RewriteCond %{HTTP_USER_AGENT} ^.*MetaBot.* [NC,OR] # MetaGer
RewriteCond %{HTTP_USER_AGENT} ^.*SearchEncrypt.* [NC,OR] # Search Encrypt
RewriteCond %{HTTP_USER_AGENT} ^.*WolfBot.* [NC,OR] # WolframAlpha
RewriteCond %{HTTP_USER_AGENT} ^.*OscoboBot.* [NC,OR] # Oscobo
RewriteCond %{HTTP_USER_AGENT} ^.*LookseekBot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*NeevaBot.* [NC,OR] # Neeva
RewriteCond %{HTTP_USER_AGENT} ^.*PeekBot.* [NC,OR] # Seekport
RewriteCond %{HTTP_USER_AGENT} ^.*YacyBot.* [NC,OR] # YaCy
RewriteCond %{HTTP_USER_AGENT} ^.*FindxBot.* [NC,OR] # Findx
RewriteCond %{HTTP_USER_AGENT} ^.*MeiliBot.* [NC,OR] # Meilisearch
RewriteCond %{HTTP_USER_AGENT} ^.*SphinxBot.* [NC,OR] # Sphinx
RewriteCond %{HTTP_USER_AGENT} ^.*SeznamBot.* [NC,OR] # Seznam
RewriteCond %{HTTP_USER_AGENT} ^.*CocCocBot.* [NC,OR] # Cốc Cốc
RewriteCond %{HTTP_USER_AGENT} ^.*Linguee.* [NC,OR] # Linguee
RewriteCond %{HTTP_USER_AGENT} ^.*PresearbotBot.* [NC,OR] # Presearch
RewriteCond %{HTTP_USER_AGENT} ^.*KrakeBot.* [NC,OR] # Kagi
RewriteCond %{HTTP_USER_AGENT} ^.*WebCrawler.* [NC,OR] # WebCrawler
RewriteCond %{HTTP_USER_AGENT} ^.*DeuSu.* [NC,OR] # DeuSu
RewriteCond %{HTTP_USER_AGENT} ^.*GigablastOpenSource.* [NC,OR] # Gigablast OpenSource
## Разрешить всех известных хороших ботов и сервисы
RewriteCond %{HTTP_USER_AGENT} ^.*MJ12bot.* [NC,OR] # Majestic
RewriteCond %{HTTP_USER_AGENT} ^.*Twitterbot.* [NC,OR] # Twitter
RewriteCond %{HTTP_USER_AGENT} ^.*LinkedInBot.* [NC,OR] # LinkedIn
RewriteCond %{HTTP_USER_AGENT} ^.*Pinterest.* [NC,OR] # Pinterest
RewriteCond %{HTTP_USER_AGENT} ^.*Slackbot.* [NC,OR] # Slack
RewriteCond %{HTTP_USER_AGENT} ^.*WhatsApp.* [NC,OR] # WhatsApp
RewriteCond %{HTTP_USER_AGENT} ^.*TelegramBot.* [NC,OR] # Telegram
RewriteCond %{HTTP_USER_AGENT} ^.*Discordbot.* [NC,OR] # Discord
RewriteCond %{HTTP_USER_AGENT} ^.*SkypeUriPreview.* [NC,OR] # Skype
RewriteCond %{HTTP_USER_AGENT} ^.*Applebot.* [NC,OR] # Apple
RewriteCond %{HTTP_USER_AGENT} ^.*redditbot.* [NC,OR] # Reddit
RewriteCond %{HTTP_USER_AGENT} ^.*Nimbostratus.* [NC,OR] # Tumblr
RewriteCond %{HTTP_USER_AGENT} ^.*Datadog.* [NC,OR] # Datadog Monitoring
RewriteCond %{HTTP_USER_AGENT} ^.*APIs-Google.* [NC,OR] # Google API
RewriteCond %{HTTP_USER_AGENT} ^.*Google-Read-Aloud.* [NC,OR] # Google Read Aloud
RewriteCond %{HTTP_USER_AGENT} ^.*W3C_Validator.* [NC,OR] # W3C Validator
RewriteCond %{HTTP_USER_AGENT} ^.*GTmetrix.* [NC,OR] # GTmetrix
RewriteCond %{HTTP_USER_AGENT} ^.*PageSpeed.* [NC,OR] # Google PageSpeed
RewriteCond %{HTTP_USER_AGENT} ^.*WebPageTest.* [NC,OR] # WebPageTest
RewriteCond %{HTTP_USER_AGENT} ^.*StatusCake.* [NC,OR] # StatusCake
RewriteCond %{HTTP_USER_AGENT} ^.*UptimeRobot.* [NC,OR] # UptimeRobot
RewriteCond %{HTTP_USER_AGENT} ^.*NewRelic.* [NC] # New Relic (Последнее условие без [OR])
## Разрешить ботов предварительного просмотра в социальных сетях
RewriteCond %{HTTP_USER_AGENT} ^.*facebookexternalhit.* [NC,OR] # Facebook
RewriteCond %{HTTP_USER_AGENT} ^.*Mastodon.* [NC,OR] # Mastodon
RewriteCond %{HTTP_USER_AGENT} ^.*TumblrBot.* [NC] # Tumblr (Последнее условие без [OR])
## Разрешить веб-просмотры мобильных приложений
RewriteCond %{HTTP_USER_AGENT} ^.*Instagram.* [NC,OR] # Instagram в встроенном браузере
RewriteCond %{HTTP_USER_AGENT} ^.*FB_IAB.* [NC,OR] # Встроенный браузер Facebook
RewriteCond %{HTTP_USER_AGENT} ^.*FBAN.* [NC,OR] # Приложение Facebook
RewriteCond %{HTTP_USER_AGENT} ^.*Twitter.* [NC,OR] # Twitter в встроенном браузере
RewriteCond %{HTTP_USER_AGENT} ^.*LinkedInApp.* [NC] # Приложение LinkedIn (Последнее условие без [OR])
# Разрешить эти запросы
RewriteRule .* - [L]
# Защита от SQL инъекций
RewriteCond %{QUERY_STRING} "(?:declare|insert|drop|delete|update|union|select|create|rename|truncate|alter|exec|concat|print|or|and|varchar|where|join|into|load_file|outfile)" [NC]
RewriteRule .* - [F]
# Блокировать пустые User Agents и известных плохих ботов
RewriteCond %{HTTP_USER_AGENT} ^-?$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^wget.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Postman.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Python.* [NC]
RewriteRule .* - [F]
# Блокировать доступ к конфиденциальным файлам
<FilesMatch "^(\.htaccess|\.htpasswd|\.git|\.env|wp-config\.php)$">
Order Allow,Deny
Deny from all
</FilesMatch>
# Блокировать всех остальных User Agents
RewriteRule .* - [F]
.
Ответ или решение
Создание белого списка (whitelist) для различных ботов и браузеров в файле .htaccess
вашего Apache-сервера — задача, требующая внимательности и тщательной проработки. Ниже представлен анализ вашего текущего кода с предложениями по улучшению.
Компоненты вашего кода
-
Включение модуля переадресации:
- Код правильно включает
RewriteEngine On
, что необходимо для работы правил переадресации.
- Код правильно включает
-
Безопасные заголовки:
- Использование заголовков безопасности, таких как
X-Content-Type-Options
,X-Frame-Options
иReferrer-Policy
, помогает повысить уровень защиты вашего сайта.
- Использование заголовков безопасности, таких как
-
Запрет на просмотр каталогов:
- Строка
Options -Indexes
предотвращает возможность просмотра каталогов, что является хорошей практикой.
- Строка
Белый список: преимущества и недостатки
Ваш белый список включает множество известных браузеров, поисковых систем и хороших ботов. Однако следует учитывать следующие моменты:
-
Потенциальное блокирование легитимного трафика:
Реализация фильтрации поUser-Agent
может блокировать некоторых пользователей, если ихUser-Agent
не совпадает с вашими условиями. Современные браузеры могут иметь уникальные пользовательские агенты, которые вы не учли. -
Неполный список хороших ботов:
Возможно, стоит рассмотреть возможность добавления таких ботов, как:SearchAPI
(API для запросов от поисковых систем).- Боты, используемые для мониторинга производительности веб-сайтов, такие как
Pingdom
иDatadog
.
Проблемы с текущим подходом
-
Актуализация списка:
Поддержка белого списка требует периодического обновления. Это может быть трудоемким процессом, особенно с увеличением количества компактных и специализированных ботов. -
Блокировка по умолчанию:
Конечная строка сRewriteRule .* - [F]
блокирует все остальные агенты, которые не попадают под условия выше, что является жестким подходом. Это может привести к блокировке легитимных посетителей.
Рекомендации для улучшения
-
Добавление расширенного списка хороших ботов:
Возможно, стоит регулярно обновлять список на основании последних данных о популярных ботов и ихUser-Agent
. -
Улучшение блокировки:
Вместо удаления всех незафиксированных пользователей, рассмотрите возможность создания отдельного правила для ограничения частоты запросов от незнакомыхUser-Agent
, чтобы избежать возможного злоупотребления. -
Использование
Allow
иDeny
:
Вместо того чтобы блокировать все, можно использовать более гибкие правила, позволяющие в зависимости от ситуации временно предоставлять доступ к определенным ресурсам. -
Логи и мониторинг:
Настройте логи, чтобы отслеживать результаты регистрации для всех входящих запросов. Это позволит вам видеть, какиеUser-Agent
пытаются получить доступ и могут быть подозрительными.
Заключение
Ваш текущий подход к созданию белого списка ботов в .htaccess
имеет свои достоинства и недостатки. Основное внимание стоит уделить возможному блокированию легитимного трафика, актуализации списка и гибкости в правилах. Регулярное обновление и мониторинг логов помогут обеспечить баланс между защитой и доступностью вашего контента.