Защита от нелегального зеркала сайта

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

Практикуются два метода – полное копирование сайта и «прокси» (т.е. фейковый сайт по запросу получает контент с оригинального сайта, меняет в ссылках домен и выдает клиенту). Защититься от первого случая практически невозможно, от второго можно защитится, добавив проверку домена по следующему алгоритму:

1. C помощью JQuery на все страницы сайта вставляется элемент <img>, который вызывает PHP-скрипт, передовая ему текущий домен из адресной строки браузера через GET-параметр.

$(function(){	
	$('body').append('<img src="/pixel.jpg?v=' + window.location.hostname + '">');
});
JS

2. Чтобы по URL /pixel.jpg срабатывал PHP-скрипт, нужно добавить правило в htaccess:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^pixel.jpg$ protect.php [L,QSA]
htaccess

3. В случаи, если полученный домен не совпадает с эталонным, администратору отправляется письмо с доменом и IP-адресом сервера, на котором, был выведен сайт.

Такой метод вывода сайта на другом домене используют некоторые сервисы, например, переводчики или «сохраненная копия» в Яндексе и Google, поэтому их домены добавлены в список исключений.

protect.php

<?php

/* Эталонный домен (без www) */
$domen = 'example.com';

/* Куда отправить письмо */
$email = 'admin@example.com';

/* Исключения */
$allow = array(
	'yandexwebcache.net', 
	'webcache.googleusercontent.com', 
	'translate.googleusercontent.com'
);
 
/* Проверка */
if (!empty($_GET['v'])) {
	$сheck = str_replace(array('www.', '/'), '', $_GET['v']);
	if (!in_array($сheck, $allow) && $domen != $сheck) {
		mail(
			$email, 
			'Вывод ' .  $domen . ' на другом домене', 
			'Домен: ' . $сheck . "\r\nIP сервера: " . @$_SERVER['REMOTE_ADDR']
		);
	}
}

/* Вывод изображения 1*1 px */
$im = imagecreate(1, 1);
$color = imagecolorallocate($im, 255, 255, 255);
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
exit;
PHP
4. Пройдет время и в случаи появления письма, остается только заблокировать полученный IP-адрес в htaccess или PHP:

htaccess:

Order Allow,Deny
Allow from all
Deny from xxx.xxx.xxx.xxx
htaccess

В PHP:

if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') {
	exit;
}
PHP

По диапазону адресов:

$black_list = array(
	array('xxx.xxx.128.0', 'xxx.xxx.255.255'),
);

$ip = @ip2long($_SERVER['REMOTE_ADDR']);
foreach($black_list as $ips) {
	if ($ip >= @ip2long($ips[0]) && $ip <= @ip2long($ips[1])) {
		exit;
	}
}
PHP
05.04.2020 , обновлено 13.05.2020

Комментарии

, чтобы добавить комментарий.

Другие публикации

Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
14.11.2017
51926
+3
Отправка писем через SMTP в PHPMailer
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают в спам или...
04.04.2018
44182
+7
PHP класс для отправки E-mail
Отправка писем в кодировке UTF-8 и формате HTML, вложение файлов, дамп писем на сервере в файле eml.
21.12.2016
5933
+1
Защита текстов от копирования
Примеры защиты от копирования текста с сайта, добавление копирайта при копировании и отключение выделения текста в браузере. Методы обхода этих ограничений.
19.12.2016
4622
0
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
03.10.2018
6029
0
Пример парсинга html-страницы на phpQuery
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
18.03.2020
4109
+2