Безопасность: защищаем сайт от ботов с использованием белых списков в файле .htaccess

Discussion in 'Безопасность и Анонимность' started by GAiN, 3 Sep 2014.

  1. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Всем Привет!
    Эта статья будет посвещена тому, как защитить сайт от ботов сканеров, парсеров контента, переходов с ненужных нам ресурсов!
    В сети предлагаются чёрные списки юзерагентов ботов для внесения их в файл .htaccess.
    Здесь я применю куда более эффективнее белый список, что бы постоянно не пополнять списки, нужно создать список разрешённых юзерагентов, с которых можно будет входить на сайт.
    В этом примере я добавлю поисковых роботов Google и Yandex, и пользовательские популярные браузеры.
    фильтровать ботов будем по значению: YandexНазваниеБота
    браузеры пользователей я отфильтрую по окончанию, которое содержится в useragent строке браузеров.

    пример на useragentе поискового бота:
    пример на пользовательском useragente:
    пропишем маску, например для нужных ботов yandex, перечислять будем в скобках окончания, разделяя их знаком |

    PHP:
    ### белый список ботов и браузеров для .htaccess
    RewriteEngine On
    RewriteCond 
    %{HTTP_USER_AGENT} !googlebot [NC]
    RewriteCond %{HTTP_USER_AGENT} !Google-StructuredDataTestingTool [NC]
    RewriteCond %{HTTP_USER_AGENT} !Yandex(Bot|Metrika|Favicons|Webmaster|Pagechecker|Antivirus|Images|Video|Media) [NC]
    ### список пользовательских браузеров
    RewriteCond %{HTTP_USER_AGENT} !MSIE [NC]
    RewriteCond %{HTTP_USER_AGENT} !opera [NC]
    RewriteCond %{HTTP_USER_AGENT} !firefox [NC]
    RewriteCond %{HTTP_USER_AGENT} !safari [NC]
    RewriteCond %{HTTP_USER_AGENT} !chrome [NC]
    ###ошибка 403 - доступ к которой нужно разрешить всем, иначе страница не будет показана и скрипт лога не загрузится
    RewriteCond %{REQUEST_URI} !^/403.php.*$
    RewriteRule ^.* - [F,L]
    ### можно послать если useragent не совпал например на другой сайт:
    #RewriteRule /*$ /close1/redirect.php [L,R]
    Составим список разрешённых адресов - с которых можно переходить на сайт.
    Важно: нужно обязательно прописать свой сайт в списке для возможности переходить по страницам своего сайта.
    Можно использовать маски - и прописать региональные домены, и поддомены.

    PHP:
    ### белый список ссылок от куда можно переходить на сайт, referer для .htaccess
    RewriteEngine On
    RewriteCond 
    %{HTTP_REFERER} !^$
    # список разрешенных доменов
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?(encrypted.)?google(.ru|.com|.org|.de|.com.ua|.ua|.by|.kz) [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex(.ru|.com|.ua|.by|.kz) [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?ya(.ru|.com|.ua|.by|.kz) [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?(forum)?antichat.ru [NC]
    RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?(site.)?mysite.com [NC]
    ###ошибка 403
    RewriteCond %{REQUEST_URI} !^/403.php.*$
    RewriteRule ^.* - [F,L]
    ### можно послать если referer не совпал например на другой сайт или поддомен:
    #RewriteRule /*$ /close/redirect.php [L,R]
    Спасибо за внимание!
    GAiN®, antichat 2014
     
    1 person likes this.