Предотвращение отображения зеркала сайта на стороннем домене при использовании IP вашего сервера в DNS записи стороннего домена
Иногда владелец сайта может столкнуться с уникальной ситуацией: сразу после внесения изменений на сайте, эти же изменения появляются на несанкционированном зеркале веб-сайта. Кроме этого, также присутствуют следующие признаки:
- зеркало сайта на постороннем домене может выполнять функции сервисов, которые заложены на оригинальном сайте;
- если вы будете делать тестовые запросы к незаконному зеркалу вашего сайта, то в логах вашего сервера вы увидите эти запросы и свой IP адрес.
Причиной такого поведения может оказаться то, что злоумышленник для своего домена прописал в DNS записях IP вашего сервера. Проверить это можно любой из трёх команд: nslookup, host или dig. Как вы можете видеть на следующих скриншотах, результат вывода чуть разный, но суть одна, для сайта suip.biz создан двойник.
Конечно, такое поведение владельцев домена кажется нелогичным, а абсолютная зеркальность веб-сайта можете напугать начинающих веб-мастеров, но ничего страшного в этом нет. Более того, вы можете использовать этот чужой домен как один из своих виртуальных хостов. Конечно же, не надо там размещать ничего ценного (истинные владельца домена в этом случае могут скопировать содержимое и разместить уже на своём сервере), и не нужно там размещать ничего противозаконного (в конце концов, это ваш сервер и ваш 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. «Шифруйте» ссылки, - это здорово мешает работе автоматических парсеров. Делайте хотя бы некоторые ссылки не относительными, а абсолютными, т.е. включающими адрес домена.
Связанные статьи:
- Как отключить определённые функции в PHP (56.5%)
- Как изменить адрес страницы входа в phpMyAdmin (55.2%)
- Решение пробем с ошибкой .htaccess: Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration (49.2%)
- Как настроить аутентификацию по паролю с Apache в Debian, Ubuntu и производных (49.2%)
- Как в PHP 8 показать все ошибки (49.2%)
- Как вывести все задачи Cron (RANDOM - 31.8%)
Здравствуйте, а таким образом можно сделать не санкционированое зеркало для сайта, когда он не один на сервере, что прописывают в dns зеркала?
Если сервер (виртуальный хост) настроен без
то достаточно купить домен и в DNS прописать IP этого сервера. Именно так и получилось в моём случае: я купил VPS с IP. Я этого не знал, но на этот IP указывала DNS запись доменного имени. Сейчас срок регистрации этого домена истёк, а ранее при переходе на него в брауезере я видел свой сайт.
"то достаточно купить домен и в DNS прописать IP этого сервера", а если на сервере несколько хостов, то что прописавать для одного, конкретного хоста. Мне просто нужно сделать зеркало, прокладка для рекламы. Надо модерацию пройти, а заморачиваться с iframe или редиктом не охото.
Должен показываться "дефолтный" хост - тот, который загружается последним в настройках сервера. Чтобы узнать, что это за хост - наберите в браузере IP вашего сервера.
Ну да "дефолтный", а есни мне нужен конкретный хост, как сделать не подскажешь
По идее, тот, который загружается последним в настройках, тот и становится дефолтным.
В настройках веб-сервера, в файле /etc/httpd/conf/httpd.conf, обычно стоит строка:
Она означает загружать все виртуальные хосты (файлы с расширением .conf из директории conf/sites-enabled). Они загружаются в алфавитном порядке. Чтобы это поменять, строку
надо закомментировать, а вместо неё вписать все хосты по очереди:
в самом низу нужно поставить тот, который нужно сделать дефолтным. Это в теории – неохота тестировать. Но должно работать.
Спасибо.
Здравствуй, а как этим могут навредить для СЕО? На шел для своего сайта подобное зеркало, но явно умышленное, расположен на поддомене словатского сайта, ip принадлежит CloudFlare.
Можно ли получить с этого пользу (поставить ридерект и склеить) или просто заблокировать или ничего ниделать rel=canonical и host в robots.txt на зеркали присутствуют?
Я у себя на сервере сделал виртуальный хост под чужое доменное имя, указывающее на IP моего сервера. В этом виртуальном хосте можно разместить любую страницу. Мне было важно, чтобы там не показывался мой сайт.
Здравствуйте, подскажите как релизовать для Nginx эту часть:
<VirtualHost *:80>
ServerName catchall
<Location />
Order allow,deny
Deny from all
</Location>
</VirtualHost>