Информер курса валют ЦБ РФ   •   Магазин расширений
5 770 просм
49 комм
Поделиться:

Как заблокировать доступ к сайту по определенной стране или городу на PHP?

Бывает, что по какой-то причине вам нужно ограничить доступ к вашему сайту тому или иному городу, стране. Например, ваш сайт имеет, по большей части, контент на русском языке, и вдруг вы замечаете подозрительный трафик из Китая, который сильно тормозит работу вашего сайта.

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

А теперь перейдем от слов к практике.

Думаю, что не стоит напоминать, что на вашем сайте должна быть поддержка PHP.

1. Начинаем писать наш мини-модуль блокировки. Воспользуемся суперглобальным массивом «$_SERVER», который поможет вам определить IP адрес пользователя:

<?php

	header("Content-Type: text/html; charset=utf-8");

	$user_ip = $_SERVER['REMOTE_ADDR'];

?>

2. На основе полученного IP необходимо определить, откуда наш посетитель. Для этого мы воспользуемся сервисом «freegeoip.net», который бесплатно, на основе IP, предоставит нам некоторую информацию о пользователе.

<?php

	header("Content-Type: text/html; charset=utf-8");

	$user_ip = $_SERVER["REMOTE_ADDR"];
	$user_info = file_get_contents("http://freegeoip.net/json/".$user_ip);
	$user_info = json_decode($user_info);
	$user_country = $user_info->country_name;
	$user_city = $user_info->city;

?>

Здесь $user_country и $user_city содержат в себе название страны и города соответственно, которые указаны на английском языке.

На момент написания статьи сервис «freegeoip» был в рабочем состоянии. Если вдруг он перестал работать, воспользуйтесь следующими сервисами для получения информации о пользователе:

http://ipinfo.io 
http://xhanch.com/xhanch-api-ip-get-detail/ 
http://geoiplookup.net/ 
http://ip-api.com 
http://ipinfodb.com 

Обратите внимание, что при использовании этих сервисов необходимо внести корректировки в код.

3. Теперь сделаем проверку страны и заблокируем доступ, если страна совпала с указанной вами. На примере России итоговый скрипт будет выглядеть так:

<?php

	header("Content-Type: text/html; charset=utf-8");

	$user_ip = $_SERVER["REMOTE_ADDR"];
	$user_info = file_get_contents("http://freegeoip.net/json/".$user_ip);
	$user_info = json_decode($user_info);
	$user_country = $user_info->country_name;
	$user_city = $user_info->city;

	if($user_country == "Russia") { // Проверяем страну посетителя

		@header("HTTP/1.1 503 Service Temporarily Unavailable");
		@header("Status: 503 Service Temporarily Unavailable");
   
		echo <<<HTML
			Извините, но для Вашей страны заблокирован доступ к нашему сайту =(
			
			<style>
				body {
					background: #f4f4f4;
				}
			</style>
HTML;

		exit();

	}

?>

Между

echo <<<HTML

	… 

HTML;

вы можете указать любые HTML-теги, CSS-стили или скрипты и таким образом настроить нужное вам оформление для страницы блокировки.

Визуально итог работы нашего скрипта будет такой:

Как заблокировать доступ к сайту по определенной стране или городу на PHP?

Сам код нужно вставлять в самый верх темы вашего сайта, либо же подключать его через:

<?php
	
	include_once("/lock.php");
	
?>

Где «/lock.php» – название скрипта и полный путь до него на вашем хостинге. Для проверки работы скрипта посетите свой сайт через какой-нибудь анонимайзер, который предоставляет выбор страны, или же воспользуйтесь прокси-сервером.

49
комментариев
Навигация:
1 2 3 4
Павел, здравствуйте. Да, можно.

Скажите какая CMS используется на сайте, подскажу как лучше можно сделать.
  • 0
16.05 в 09:50
Артем, использую DLE (Datalife Engine). Спасибо большое за помощь!
  • 0
Павел, здравствуйте. Прошу прощения за поздний ответ.

1. Подключаетесь к сайту по FTP.

2. В папке /engine/modules/ создаете файл vk-widget.php. Сам файл заполните скриптом:

<?php

/*
=====================================================
Автор: Артем Малков
-----------------------------------------------------
Назначение: Блокировка виджета VK
=====================================================
*/

if(!defined("DATALIFEENGINE")) {

die("Hacking attempt!");

}

$user_ip = $_SERVER["REMOTE_ADDR"];
$user_info = file_get_contents("http://ip-api.com/json/".$user_ip);
$user_info = json_decode($user_info);
$user_country = $user_info->country;

if($user_country != "Ukraine") {

echo <<<HTML

Здесь ваш полный код виджета от ВК

HTML;

}

?>

Здесь ваш полный код виджета от ВК - замените на все скрипты от ВК.

3. Далее, в шаблоне вашего сайта, в нужное место вставьте:

{include file="engine/modules/vk-widget.php"}

По необходимости очистите кэш сайта.
  • 0
20.05 в 12:13
Супер! Все работает! Спасибо вам огромное!
  • 0
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.
Подняться наверх