Как заблокировать доступ к сайту для посетителей из определенной страны?
При функционировании сайта Вы можете столкнуться с такой задачей, как необходимость блокировки доступа к сайту из определенных стран. Причиной этому может большой трафик из некоторой страны, который забивает канал. При более внимательном рассмотрении данный трафик даже может оказаться попытками взлома сайта или показателем какой-либо иной вреденосной деятельности.
Но вне зависимости от того, что послужило причиной блокировки, на PHP заблокировать доступ к сайту можно следующим способом. Сразу оговорюсь, что данная блокировка в некоторой степени условная, так как посетители могут пользоваться, например, VPN.
Итак, приступим, код достаточно простой, однако если остануться вопросы, обязательно задавайте их в комментариях!
// этот ключ доступа можно получить, пройдя простую регистрацию на сайте ipstack.com
// достаточно будет и бесплатного тарифа, ключ доступен сразу после регистрации
// в личном кабинете
const API_KEY = '';
// просто случайный IP
const IP = '12.09.123.4';
function getIpInfo($ip = IP) {
// API, который возвращает информацию в формате JSON
$endpoint = sprintf('http://api.ipstack.com/%s?access_key=%s&format=1',API_KEY,$ip);
// делаем запрос
$response = file_get_contents(sprintf($endpoint,$ip));
return $response;
}
Теперь у нас есть функция, которая делает запрос на API и возвращает данные для заданного IP. Далее нам из этих данных надо получить название страны.
// получаем название страны из данных, полученных с API
function getCountryName($ip) {
return json_decode(getIpInfo($ip))->country_name;
}
А далее, остается отфильтровать:
// функция-фильтр заблокированных направлений
function blackList()
{
// массив со списком блокируемых стран
$black_list = ['China','South Korea','Netherlands'];
// для примера здесь так, но в production коде надо делать, например, так $_SERVER['REMOTE_ADDR']
$ip = '2.58.194.141';
$country = getCountryName($ip);
if( in_array($country,$black_list) ) {
return "Доступ к сайту из Вашей страны ($country) ограничен!";
}
return "Добро пожаловать!";
}
Таким образом, вот так можно ограничить доступ к сайту из определенных стран с помощью PHP. Учтите однако, что данный код должен работать на ранних подступах, т.е. как только пользователь запросил адрес Вашего сайта, одной из первых среди других, должна выполняться эта функция, которая в зависимости от результата будет либо запрещать доступ к сайту, либо пропускать пользователя далее.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.