Как заблокировать определенный браузер агента веб-сайта? - PullRequest
0 голосов
/ 11 мая 2018

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

Они обычно используют IP-адреса amazonaws для входа, однако в последнее время они переключились на другой хост.

Что остается неизменным, так это то, что они используют один и тот же пользовательский агент. Есть ли способ заблокировать с помощью useragent? Это потому, что я пробовал это, но это не удалось. Надеюсь, я смогу получить от этого свет.

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36
RewriteRule .* - [R=503,L]

Обновление: Это мой обновленный .htaacess только для дальнейшего использования, если он помогает сообществу в том, как он должен выглядеть. Спасибо, MrWhite

<LocationMatch .*>
  <IfModule mod_security2.c>
    SecRuleRemoveById 211170
    SecRuleRemoveById 211180    
  </IfModule>
</LocationMatch>


Options +FollowSymlinks

Options -Indexes

<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
 Require all denied
</FilesMatch>

# SEO URL Settings
RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36"
RewriteRule .* - [F]

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

<Files 403.shtml>
order allow,deny
allow from all
</Files>

1 Ответ

0 голосов
/ 11 мая 2018
RewriteCond %{HTTP_USER_AGENT} Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36

Пробелы являются разделителями в конфигурационных файлах Apache. Таким образом, вы, вероятно, получили ошибку о недопустимых флагах (если вы проверите журнал ошибок - браузер, скорее всего, просто сообщит об ошибке 500). Вы должны либо использовать обратную косую черту, чтобы избежать пробелов в строке user-agent, или заключить весь user-agent (т. Е. CondPattern - 2-й аргумент в директиву RewriteCond) в двойные кавычки. Также обратите внимание, что по умолчанию это регулярное выражение, поэтому любые специальные символы / мета регулярные выражения также необходимо экранировать (включая ., ( и )).

Например, попробуйте следующее:

RewriteCond %{HTTP_USER_AGENT} "^Mozilla/5\.0 \(X11; Linux x86_64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Ubuntu HeadlessChrome HeadlessChrome Safari/537\.36$"
RewriteRule .* - [F]

Это вернет 403 Запрещено вместо 503 Служба недоступна (что на самом деле является временным состоянием).

В качестве альтернативы, для выполнения лексикографического сравнения строк (точное совпадение) вместо регулярного выражения можно использовать префиксный оператор = в CondPattern . Например:

RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36"

CondPattern теперь обрабатывается как обычная строка (не регулярное выражение), поэтому нет необходимости экранировать специальные символы.

Само собой разумеется, это должно идти вверху вашего .htaccess файла - вместе с любыми другими директивами блокировки.


UPDATE:

Если директивы mod_rewrite переопределяются (возможно, из файла .htaccess в подкаталоге), тогда вы можете использовать комбинацию mod_setenvif и mod_authz_core (Apache 2.4+), что-то вроде:

BrowserMatch "^Mozilla/5\.0 \(X11; Linux x86_64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Ubuntu HeadlessChrome HeadlessChrome Safari/537\.36$" block_it
<RequireAll>
Require all granted
Require not env block_it
</RequireAll>

Как отмечалось выше, это синтаксис Apache 2.4+.

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