Посещения сайта с непонятных реферов и несуществующих доменов
Очень часто стал замечать, что некоторые посетители сайта смотрят только главную страницу и страницу регистрации, имеют рефер с левого домена, который к тематике моего сайта не имеет ни малейшего отношения, и ссылки на том сайте быть не может. И даже встречаются домены, которых вообще не существует... Долго искал "что это" и "кто это", но ответа не нашёл.
Поскольку сайт у меня преимущественно для РФ, а такие пользователи с подобными реферами из KZ и UA, то решил просто заблокировать доступ к сайту для этих стран.
Несколько доменов:
garnec.com
novo2.ru
guitarbank.ru
weektrade.ru
mebelart-group.ru
Сам код для блокировки стран взял с этого сайта, проверил по этому API сервису все IP адреса, с которых были такие посещения - страны совпали по многим базам IP адресов. В общем получился такой код:
<?php
if( !defined('DATALIFEENGINE') ) {
header( "HTTP/1.1 403 Forbidden" );
header ( 'Location: ../../' );
die( "Hacking attempt!" );
}
header("Content-Type: text/html; charset=utf-8");
if(isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { // Если сайт подключен к Cloudflare
$user_ip = $_SERVER["HTTP_CF_CONNECTING_IP"];
} else {
$user_ip = $_SERVER["REMOTE_ADDR"];
}
$user_info = file_get_contents("http://api.ipstack.com/".$user_ip."?access_key=0000000000000"); // 0000000000000 - меняете на ваш KEY сервиса
$user_info = json_decode($user_info);
$user_country = $user_info->country_name;
$user_city = $user_info->city;
if($user_country == "Ukraine" || $user_country == "Kazakhstan") { // Проверяем страну посетителя
@header("HTTP/1.1 503 Service Temporarily Unavailable");
@header("Status: 503 Service Temporarily Unavailable");
echo <<<HTML
Извините, но для Вашей страны заблокирован доступ к нашему сайту!
<style>
body {
background: #f4f4f4;
}
</style>
HTML;
die();
}
?>
Сохраняем это в PHP код, кидаем его в папку, например, engine/mods, и подключаете этот файл через include в самый вверх в файле main.tpl вашего шаблона:
{include file="engine/mods/country_block_ua.kz.php"}
Для проверки добавлял к списку Russia - доступ к сайту получить не смог, значит код работает.
Я не PHP кодер, поэтому насколько хорош данный код в плане оптимизации работы - ничего не могу сказать, но самое главное в данный момент для меня - оно работает!
PS стоит отметить, что данный сервис имеет лимит на количество обращений в месяц по бесплатному тарифу, для небольших сайтов данный код вполне пойдёт, для крупных же порталов можно использовать уже альтернативные сервисы определения страны пользователя, например SxGEO.
Решил выложить вариант с SxGEO, здесь нужно учитывать расположение файлов sxgeo.* (если у вас нет этого модуля под ДЛЕ, то используйте вариант выше!):
<?php
if( !defined('DATALIFEENGINE') ) {
header( "HTTP/1.1 403 Forbidden" );
header ( 'Location: ../../' );
die( "Hacking attempt!" );
}
include_once ( ENGINE_DIR . '/classes/sxgeo.php' );
$SxGeo = new SxGeo( ENGINE_DIR . '/data/SxGeo.dat' );
$ip_user = $_SERVER['REMOTE_ADDR'];
$country = $SxGeo->getCountry($ip_user);
if($country == "UA" || $country == "KZ") { // Проверяем страну посетителя
//if(in_array($country, [LT,US,BR,GB,FR,DE,FI,BY,NL,MD,CA,CA,CZ,EE,IN,IE,IT,LV,PL,ZA,UA]) { // Или страны массивом
@header("HTTP/1.1 503 Service Temporarily Unavailable");
@header("Status: 503 Service Temporarily Unavailable");
echo <<<HTML
Извините, но для Вашей страны заблокирован доступ к нашему сайту!
HTML;
die();
}
?>