Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как ограничить доступ пользователям из определённых стран и регионов?

Николай Андреев Гуру (4260), на голосовании 5 месяцев назад
Как программным способом (не через дурацкие smm), например, через PHP или даже JS ограничить доступ пользователям из определённых стран и регионов?
 // что-то наподобие этого, только нормально написанное :)
//Это js-подобный текст
function BlockAccess {
var region1 = Ru;
var region2 = Ua;
// Как-то определить пользователя по ip etc
for (region Ua) {
document.write('

403 Access denied from your area. Извините, доступ временно ограничен из вашего региона. Пока посетите

Телеграмм');
}
}


// Т.е., if (region) = Ru => "200", else = "403 || 401"
Помогите, пожалуйста. И что лучше подходит: PHP или можно выкрутиться через JS?
Дополнен 6 месяцев назад
Приведите, пожалуйста, рабочий код.
Голосование за лучший ответ
Татьяна Просветленный (36374) 6 месяцев назад
Чтобы ограничить доступ пользователей из определённых стран или регионов, можно использовать как PHP, так и JavaScript. Однако PHP является более надёжным вариантом, так как выполняется на серверной стороне и позволяет избежать обхода ограничений.

Для реализации на PHP можно использовать базы данных геолокации по IP. Существует несколько библиотек и сервисов, которые предоставляют такую возможность, например, MaxMind GeoIP2. Вот пример, как это можно сделать:

Использование PHP и MaxMind GeoIP2
Скачайте и установите библиотеку MaxMind GeoIP2.
Скачайте базу данных GeoLite2 от MaxMind (бесплатная версия).
 require 'vendor/autoload.php'; // Подключение автозагрузчика Composer 

use GeoIp2\Database\Reader;

// Путь к файлу базы данных GeoLite2
$databaseFile = 'path/to/GeoLite2-Country.mmdb';
$reader = new Reader($databaseFile);

// Получение IP-адреса пользователя
$userIp = $_SERVER['REMOTE_ADDR'];

// Получение данных о местоположении по IP
try {
$record = $reader->country($userIp);
$countryCode = $record->country->isoCode;
} catch (Exception $e) {
// В случае ошибки определения местоположения, можно обработать ошибку здесь
$countryCode = 'unknown';
}

// Список стран, которым доступ запрещен
$blockedCountries = ['RU', 'UA'];

if (in_array($countryCode, $blockedCountries)) {
header('HTTP/1.1 403 Forbidden');
echo '

403 Access denied from your area. Извините, доступ временно ограничен из вашего региона. Пока посетите Телеграмм

';
exit;
}

// Ваш остальной код здесь

?>
Установка MaxMind GeoIP2 через Composer
Убедитесь, что у вас установлен Composer.
В корне вашего проекта выполните команду для установки библиотеки:
 composer require geoip2/geoip2:~2.0 
Использование JavaScript
Если же необходимо использовать JavaScript, можно воспользоваться сторонними API для получения информации о местоположении пользователя. Например, API ipstack.

Код с использованием JavaScript и API ipstack:
  


GeoIP Block





Не забудьте заменить YOUR_ACCESS_KEY на ваш ключ доступа к API ipstack.

Заключение
PHP является более предпочтительным способом ограничения доступа, так как выполняется на сервере и сложнее обойти. JavaScript можно использовать как дополнительную меру, но он менее надежен, так как код выполняется на стороне клиента и может быть легко обойден.
Николай АндреевГуру (4260) 6 месяцев назад
Огромное спасибо!!!! Как только появится возможность нажать кнопку Выбрать ответ (кто-нибудь напишет ещё 1 ответ), отмечу ваш ответ лучшим.
Николай Андреев Гуру (4260) Николай Андреев, в другом ответе нажал.
Похожие вопросы