Блог Евгения Попова :: Программы :: DataLife Engine

Посещения сайта с непонятных реферов и несуществующих доменов


Очень часто стал замечать, что некоторые посетители сайта смотрят только главную страницу и страницу регистрации, имеют рефер с левого домена, который к тематике моего сайта не имеет ни малейшего отношения, и ссылки на том сайте быть не может. И даже встречаются домены, которых вообще не существует... Долго искал "что это" и "кто это", но ответа не нашёл.

Поскольку сайт у меня преимущественно для РФ, а такие пользователи с подобными реферами из 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();

	}

?>
Перейти на сайт (скачивать файлы можно только на сайте)