ZaLinux.ru

Защита контента веб-сайта

Предотвращение отображения зеркала сайта на стороннем домене при использовании IP вашего сервера в DNS записи стороннего домена

Иногда владелец сайта может столкнуться с уникальной ситуацией: сразу после внесения изменений на сайте, эти же изменения появляются на несанкционированном зеркале веб-сайта. Кроме этого, также присутствуют следующие признаки:

  • зеркало сайта на постороннем домене может выполнять функции сервисов, которые заложены на оригинальном сайте;
  • если вы будете делать тестовые запросы к незаконному зеркалу вашего сайта, то в логах вашего сервера вы увидите эти запросы и свой IP адрес.

Причиной такого поведения может оказаться то, что злоумышленник для своего домена прописал в DNS записях IP вашего сервера. Проверить это можно любой из трёх команд: nslookup, host или dig. Как вы можете видеть на следующих скриншотах, результат вывода чуть разный, но суть одна, для сайта suip.biz создан двойник.

01

02

Конечно, такое поведение владельцев домена кажется нелогичным, а абсолютная зеркальность веб-сайта можете напугать начинающих веб-мастеров, но ничего страшного в этом нет. Более того, вы можете использовать этот чужой домен как один из своих виртуальных хостов. Конечно же, не надо там размещать ничего ценного (истинные владельца домена в этом случае могут скопировать содержимое и разместить уже на своём сервере), и не нужно там размещать ничего противозаконного (в конце концов, это ваш сервер и ваш IP может попасть в чёрные списки). Кстати, судя по приведённым DNS записям, можно даже настроить почтовые ящики на несанкционированном домене.

Самым правильным будет переадресация на свой сайт или просто блокировка показа чего-либо на стороннем домене.

Переадресация можно сделать с помощью JavaScript, но я не рекомендую этот способ как надёжный не на все 100% (поскольку у кого-то может быть отключена поддержка JavaScript). Если вы хотите сделать переадресацию, то в файле .htaccess разместите строки:

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} !^suip.biz$
RewriteRule ^/?(.*) https://suip.biz/$1 [QSA,R=301,L]

Чтобы это работало, у вас должны быть включены RewriteEngine и поддержка .htaccess.

suip.biz вам нужно заменить на свой домен. Также протокол https, если вы не используете SSL-шифрование, нужно поменять на http.

Этот способ надёжен на 100%. Причём, вам необязательно перенаправлять на свой сайт – можете их «посылать» куда угодно.

Вместо этого метода можно использовать настройку виртуальных хостов. В вашем конфигурационном файле .conf добавьте секцию

<VirtualHost *:80>
    ServerName catchall
    <Location />
        Order allow,deny
        Deny from all
    </Location>
</VirtualHost>

Т.е. благодаря секции ServerName catchall мы отлавливаем все хосты, кроме имени веб-сайта и блокируем их секцией Deny from all.

К примеру, полный конфигурационный файл для сайта example.com выглядит так:

<VirtualHost *:80>
    ServerName catchall
    <Location />
        Order allow,deny
        Deny from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/
    <Directory /var/www/>
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

На сайте suip.biz возможны только зашифрованные соединения, поэтому я отредактировал конфигурационный файл виртуального SSL-хоста:

<VirtualHost *:443>
SSLEngine on

SSLCertificateChainFile "/etc/ssl/certs/ca-bundle.crt"
SSLCertificateFile "/etc/ssl/certs/server.crt"
SSLCertificateKeyFile "/etc/ssl/private/server.key"

ServerName catchall
    <Location />
        Order allow,deny
        Deny from all
    </Location>
</VirtualHost>


<VirtualHost *:443>
        DocumentRoot "/srv/http"
        ServerName suip.biz
        ServerAdmin al@mi-al.ru
        ErrorLog "/var/log/httpd/suipbiz-ssl-error_log"
        TransferLog "/var/log/httpd/suipbiz-ssl-access_log"

SSLEngine on

SSLCertificateChainFile "/etc/ssl/certs/ca-bundle.crt"
SSLCertificateFile "/etc/ssl/certs/server.crt"
SSLCertificateKeyFile "/etc/ssl/private/server.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/srv/http/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/var/log/httpd/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<Directory />

    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

<IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
</IfModule>

</VirtualHost>

Как видите, не смотря на интересней эффект использования чужого IP в DNS записи, ничего сложного в противодействие этой проблеме нет. Нужно только понимать суть DNS и основы настройки виртуальных хостов для Apache.

Предотвращение отображения зеркала сайта на стороннем домене в iframe

Для предотвращение вставки сайта во фреймы добавьте в файл .htaccess  следующие строки. Это не даёт веб-сайту быть вставленным во фреймы (например, быть размещённым в теге iframe), хотя ещё разрешён фрейминг для особых URI:

SetEnvIf Request_URI "/starry-night" allow_framing=true
Header set X-Frame-Options SAMEORIGIN env=!allow_framing

Противодействие хотлинкам

Хотлинки – это когда сторонние владельцы сайтов без вашего разрешения встраивают картинки и другие файлы, размещённые на вашем сервере, в свои сайты. Как минимум, это создаёт совершенно ненужную нагрузку на ваш сервер. Также это может нарушать ваши права. Бороться с хотлинками легко – встраиваемые изображения можно подменять на другие (на изображение-заглушку, например), также можно добавлять разнообразные водяные знаки и т.п.

Отключение показа ваших изображений (хотлинкинг) на других сайтах

RewriteEngine on
# Удалите следующую строку, если вы также хотите заблокировать и с пустыми реферами
RewriteCond %{HTTP_REFERER} !^$
 
RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?example.com [NC]
RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]
 
# Если вы хотите отображать баннер «заблокировано» на месте изображения, вставленного в другой сайт.
# замените вышеприведённое правило на:
# RewriteRule \.(jpe?g|png|gif|bmp) http://example.com/blocked.png [R,L]

Отключение вставки ваших изображений на чужие сайты (хотлинкинг) для конкретных доменов

Иногда вы хотите отключить хотлинкинг только для некоторых плохих парней.

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?badsite\.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?badsite2\.com [NC,OR]
RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]
 
# Если вы хотите отображать баннер «заблокировано» на месте изображения, вставленного в другой сайт.
# замените вышеприведённое правило на:
# RewriteRule \.(jpe?g|png|gif|bmp) http://example.com/blocked.png [R,L]

Останавливаем хотлинкинг, выдавая вместо изображений другой контент

# останавливаем хотлинкинг, выдавая вместо изображений другой контент
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?webware\.biz/.*$ [NC]
RewriteRule .*\.(gif|jpg)$ http://www.webware.biz/pic.jpg [R,NC,L]
</ifModule>

Борьба с копированием контента и картинок

В предыдущих пунктах показано, что добросовестный веб-мастер может одержать победу простыми техническими приёмами против незаконного содержимого. Но как быть, если кто-то просто копирует текст и картинки с вашего сайта?

К сожалению, здесь нет таких простых и однозначных технических приёмов. Иногда приходится прибегать даже к юридической защите своих авторских прав.

Начнём с того, что точно не работает и на что не нужно тратить своё время:

  • отключение правой кнопки мыши и запрет копирования с помощью JavaScript. Есть тысяча и один способ обхода данного ограничения. При этом страдают обычные пользователи, которые нашли ваш материал полезным и хотят сохранить для себя. И, опять же, это не защищает ваше содержимое – поскольку оно, в большей степени, может быть украдено с помощью автоматизированных парсеров, который вообще не поддерживают JavaScript;
  • обфускация HTML кода и JavaScript. К сожалению, таким способом вы не сможете защитить свои наработки в дизайне и программировании;
  • использование вместо текста картинок. Это вредно поскольку: а) пользователи никогда не смогут найти ваш сайт через поисковые системы; б) кто-то может сохранить картинки, распознать текст с помощью OCR-программ и выложить на своём сайте;
  • не нужно при копировании добавлять что-то вроде «Взято с такого-то сайта», это очень раздражает реальных пользователей, а против автоматизированных парсеров бессмысленно.

Что же всё-таки может помочь защитить контент:

1. Сразу при добавлении первых материалов сообщите поисковым системам о вашем сайте:

2. Если вы будете регулярно выкладывать материалы, то поисковые системы также будут регулярно заходить на ваш сайт (по крайней мере, это касается Google);

Что касается Яндекс, то в инструментах для веб-мастеров вы можете добавлять тексты, что будет способствовать закреплению вашего первоначального авторства.

3. Не спешите слишком быстро сообщать о вашем молодом сайте публике (кроме поисковых систем). Ни в коем случае не используйте услуги по «ускорению индексации»: они ничего не ускоряют, а некоторые из них участвуют в воровстве контента.

4. Пишите жалобы! Начинайте с владельца ресурса, при этом рекомендуется быть вежливым и тактичным – это значительно повышает шансы того, что владелец согласится с вашими доводами и уберёт статью или сделает ссылку на ваш первоисточник. Если владелец сайта проигнорировал, то если это действительно важно, пишите хостеру и регистратору домена.

5. Делайте водяные знаки на изображениях.

6. «Шифруйте» ссылки, – это здорово мешает работе автоматических парсеров. Делайте хотя бы некоторые ссылки не относительными, а абсолютными, т.е. включающими адрес домена.

Рекомендуемые статьи:

10 Комментарии

  1. андрей

    Здравствуйте, а таким образом можно сделать не санкционированое зеркало для сайта, когда он не один на сервере, что прописывают в dns зеркала?

    1. Alexey (Автор записи)

      Если сервер (виртуальный хост) настроен без 

      ServerName catchall

      то достаточно купить домен и в DNS прописать IP этого сервера. Именно так и получилось в моём случае: я купил VPS с IP. Я этого не знал, но на этот IP указывала DNS запись доменного имени. Сейчас срок регистрации этого домена истёк, а ранее при переходе на него в брауезере я видел свой сайт. 

      1. андрей

        "то достаточно купить домен и в DNS прописать IP этого сервера", а если на сервере несколько хостов, то что прописавать для одного, конкретного хоста. Мне просто нужно сделать зеркало, прокладка для рекламы. Надо модерацию пройти, а заморачиваться с iframe или редиктом не охото.

        1. Alexey (Автор записи)

          Должен показываться "дефолтный" хост – тот, который загружается последним в настройках сервера. Чтобы узнать, что это за хост – наберите в браузере IP вашего сервера.

          1. андрей

            Ну да "дефолтный", а есни мне нужен конкретный хост, как сделать не подскажешь

          2. Alexey (Автор записи)

            По идее, тот, который загружается последним в настройках, тот и становится дефолтным.

            В настройках веб-сервера, в файле /etc/httpd/conf/httpd.conf, обычно стоит строка:

            IncludeOptional conf/sites-enabled/*.conf

            Она означает загружать все виртуальные хосты (файлы с расширением .conf из директории conf/sites-enabled). Они загружаются в алфавитном порядке. Чтобы это поменять, строку

            IncludeOptional conf/sites-enabled/*.conf

            надо закомментировать, а вместо неё вписать все хосты по очереди:

            IncludeOptional conf/sites-enabled/site1.conf
            IncludeOptional conf/sites-enabled/site3.conf
            IncludeOptional conf/sites-enabled/site2.conf

            в самом низу нужно поставить тот, который нужно сделать дефолтным. Это в теории – неохота тестировать. Но должно работать.

  2. андрей

    Спасибо.

  3. андрей

    Здравствуй, а как этим могут навредить для СЕО? На шел для своего сайта подобное зеркало, но явно умышленное,  расположен на поддомене словатского сайта, ip принадлежит CloudFlare.

    Можно ли получить с этого пользу (поставить ридерект и склеить) или просто заблокировать или ничего ниделать rel=canonical и host  в robots.txt на зеркали присутствуют?

    1. Alexey (Автор записи)

      Я у себя на сервере сделал виртуальный хост под чужое доменное имя, указывающее на IP моего сервера. В этом виртуальном хосте можно разместить любую страницу. Мне было важно, чтобы там не показывался мой сайт.

  4. Александр

    Здравствуйте, подскажите как релизовать для Nginx эту часть:

    <VirtualHost *:80>

        ServerName catchall

        <Location />

            Order allow,deny

            Deny from all

        </Location>

    </VirtualHost>

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *