В последнее время участились случаи появления нелегальных зеркал сайтов, делается это с целью понижения позиций в поисковой выдачи.
Практикуются два метода – полное копирование сайта и «прокси» (т.е. фейковый сайт по запросу получает контент с оригинального сайта, меняет в ссылках домен и выдает клиенту). Защититься от первого случая практически невозможно, от второго можно защитится, добавив проверку домена по следующему алгоритму:
1. C помощью JQuery на все страницы сайта вставляется элемент <img>, который вызывает PHP-скрипт, передовая ему текущий домен из адресной строки браузера через GET-параметр.
$(function(){
$('body').append('<img src="/pixel.jpg?v=' + window.location.hostname + '">');
});
2. Чтобы по URL /pixel.jpg срабатывал PHP-скрипт, нужно добавить правило в htaccess:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^pixel.jpg$ protect.php [L,QSA]
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;
htaccess:
Order Allow,Deny
Allow from all
Deny from xxx.xxx.xxx.xxx
В PHP:
if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') {
exit;
}
По диапазону адресов:
$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;
}
}






