Файл htaccess — блокировка доступа к странице для определенного браузера

Файл htaccess — блокировка доступа к странице для определенного браузера

В комментарии к сообщению безопасности CMS WordPress вопрос: как заблокировать доступ к сайту с .htaccess только для определенной версии браузера. В этой статье я представлю два решения: первый основан на mod_setenvif, второй — на mod_rewrite. На этом этапе вы также можете задать вопрос — почему читатель хочет заблокировать записи из определенной версии браузера? Могло быть много причин …

  1. У данной версии браузера есть ошибки, которые делают невозможным правильное отображение веб-сайта или выполнение другого действия на нем, например, отображение видео, отправка формы и т. Д. Вот как несколько лет назад это было с одной из мобильных версий браузеров на основе механизма WebKit, которая на одной из страниц изменила «потерянные» поля рендеринга в форме, несмотря на правильное кодирование страницы / формы. Я рекомендую не блокировать решения, поэтому лучше, чтобы пользователь представил сообщение о несовместимом браузере с просьбой о его «обмене» с другим, но упрямый человек полностью блокирует пользователя браузером «просачиваться».
  2. У нас есть пробная версия сайта, и мы хотим, чтобы ее использовали только пользователи, которые используют Opera или Chrome. Ну … ситуация вообще не мнимая, и при создании веб-сайта мы можем быть вынуждены протестировать сайт в строго определенных условиях строго определенными пользователями, имеющими определенные строки UA.
  3. У нас есть неприятный спамер или тролль на сайте, который излишне поворачивает голову, и мы хотим сделать их жизнь немного сложнее. Если спамер выпускает тему, с троллем это будет не так легко, но всегда стоит попробовать, htaccess может вместить множество строк кода.

Это самые интересные сценарии, если я не пропустил что-то

.htaccess и блокировка определенной версии браузера

Большинство веб-браузеров идентифицируют пользователя на основе строки UA (User Agent String). С UA в нашем распоряжении мы можем заблокировать доступ к сайту, однако пользователи с UA могут иметь больше, поэтому имейте в виду, что мы можем заблокировать несанкционированный доступ.

Например, имея UA String в форме:

Opera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.229 Version/11.62

Правило блокировки в .htaccess выглядит следующим образом:

<Limit GET POST HEAD>

SetEnvIfNoCase User-Agent "Opera/9\.80 \(Windows NT 6\.1; WOW64; U; en\) Presto/2\.10\.229 Version/11\.62" ban_bot

Order Allow,Deny

Allow from all

Deny from env=ban_bot

</Limit>

Limit GET POST HEAD — мы определяем, для какого типа запроса будет выполняться правило блока, в этом случае определены 3 базовых: GET, POST и HEAD. Если вы не укажете методы в <Limit>, блокировка будет применяться ко всем выполненным запросам.

SetEnvIfNoCase — одна из директив модуля модуля Apache mod_setenvif вместе с активными mod_headers позволяет вам создать правило блокировки и выполнить его. SetEnvIfNoCase, в отличие от SetEnvIf, выполняет сравнение определенных переменных, не обращая внимания на размер букв. В некоторых случаях для «запуска» определенного пользователя вам придется использовать SetEnvIf.

Order Allow, Deny — порядок выполнения правил, в этом случае «передать все» (Разрешить от всех), кроме тех, которые включены в переменные (ban_bot). Таким образом, сайт сможет посещать всех пользователей, у которых есть строка UA, отличная от той, которую вы определили в переменной ban_bot.

Чтобы использовать правила блокировки из SetEnvIfNoCase / SetEnvIf, сервер должен иметь активные модули mod_setenvif и mod_headers. В противном случае нам придется иметь дело по-другому и использовать правила перезаписи, если администратор сервера включил mod_rewrite.

В приведенном выше примере правило блокировки с использованием mod_rewrite выглядит следующим образом:

ErrorDocument 403 "Zostales zablokowany!"

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} "Opera/9\.80 \(Windows NT 6\.1; WOW64; U; en\) Presto/2\.10\.229 Version/11\.62" [NC]

RewriteRule .* - [F,L]

ErrorDocument 403 — сообщение, отображаемое пользователю, когда его UA заблокирован. Если вы не реализуете обработку ошибок, сервер дополнительно возвращает ошибку HTTP 500.

RewriteEngine On — мы включаем механизм перезаписи.

RewriteCond — условие, которое должно выполняться для того, чтобы правила, помещенные в RewriteRule, обрабатывались и выполнялись. В этом примере UA появляется как целая строка, которую мы заключим в кавычки. Точкам и круглым скобкам предшествует escape-строка (обратная косая черта). Если вы найдете других символов, интерпретируемых RewriteEngine внутри UA, вы также должны «оставить» их.

RewriteRule — правила переписывания URL-адресов. В этом примере [F] обозначает код ответа 403 Forbidden server (в качестве альтернативы вы можете использовать R = 403), [L] означает, что вы имеете дело с последним правилом RewriteRule, которое должно быть выполнено.

В представленных примерах мы блокируем всю строку, которая должна соглашаться с условием блокировки. Как игнорировать все элементы, кроме имени и версии браузера?

Достаточно слегка изменить условие в правиле, ниже приведены примеры:

Использование mod_setenvif …

<Limit GET POST HEAD>

SetEnvIfNoCase User-Agent "Opera/9\.80" ban_bot

Order Allow,Deny

Allow from all

Deny from env=ban_bot

</Limit>

Использование mod_rewrite …

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} "Opera/9\.80" [NC]

RewriteRule .* - [F,L]

Другой пример, где наша цель — заблокировать всех пользователей Firefox, которые используют версию 21. Пример UA:

Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0

Использование mod_setenvif …

<Limit GET POST HEAD>

SetEnvIfNoCase User-Agent "Firefox/21\.0" ban_bot

Order Allow,Deny

Allow from all

Deny from env=ban_bot

</Limit>

Использование mod_rewrite …

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} "Firefox/21\.0" [NC]

RewriteRule .* - [F,L]

В конце еще несколько вопросов и ответов …

Как проверить браузер User Agent?

Самый простой способ проверить — использовать выделенный инструмент — Simple User Agent Checker.

Как вы проверяете, действительно ли работает блокада?

Все, что вам нужно сделать, это установить надстройку Switcher User Agent (доступный для браузеров Firefox, Chrome, Opera) и изменить строку UA UA браузера точно так, как вы добавили в блок. Если сервер возвращает код ошибки 403 или сообщение, определенное вами — блокировка работает!

Вы можете загрузить User Agent Switcher из официальных репозиториев:

  • Firefox — перейдите в AddOns Mozilla
  • Chrome — перейдите в Chrome WebStore
  • Opera — перейти в AddOns Opera