При функционировании сайта Вы можете столкнуться с такой задачей , как необходимость блокировки доступа к сайту из определенных стран . Причиной этому может большой трафик из некоторой страны, который забивает канал. При более внимательном рассмотрении данный трафик даже может оказаться попытками взлома сайта или по...
При функционировании сайта Вы можете столкнуться с такой задачей, как необходимость блокировки доступа к сайту из определенных стран. Причиной этому может большой трафик из некоторой страны, который забивает канал. При более внимательном рассмотрении данный трафик даже может оказаться попытками взлома сайта или показателем какой-либо иной вреденосной деятельности.
Но вне зависимости от того, что послужило причиной блокировки, на 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. Учтите однако, что данный код должен работать на ранних подступах, т.е. как только пользователь запросил адрес Вашего сайта, одной из первых среди других, должна выполняться эта функция, которая в зависимости от результата будет либо запрещать доступ к сайту, либо пропускать пользователя далее.
