Доброй ночи, Гость! Представляем Вам наши форумы. Вы можете зарегистрироваться чтобы писать на форумах или зайдите под своим именем, если Вы уже регистрировались.
// Если это главная страница (URI == '/'), выводим заглушку if ($request_uri == '/') { echo file_get_contents('https://адрес-сайта/access-denied.html'); exit; }
// Если не главная страница, проверяем IP $ip = $_SERVER['REMOTE_ADDR'];
// URL для получения информации о стране $api_url = "http://ipinfo.io/{$ip}?token=ВАШ_ТОКЕН"; // Регистрируемся на http://ipinfo.io/ и получаем токен, бесплатно у нас есть 50000 запросов
// Проверяем, был ли успешный ответ от API if ($response === false) { echo 'Ошибка при получении данных о стране'; exit; }
// Декодируем JSON ответ $data = json_decode($response, true);
// Получаем код страны из ответа $country_code = $data['country'] ?? '';
// Если страна не Россия, выводим заглушку и прекращаем выполнение скрипта if ($country_code !== 'RU') { echo file_get_contents('https://адрес-сайта/access-denied.html'); exit; }
Ниже вариант с добавлением в систему бана cms. Проверяет только не авторизованных. Проще сделать из этого виджет, код запроса взят из виджета антибот. Изложен принцип, код не тестировал. Тексты естественно в запрос свои пишем
PHP-код
if ($_SESSION['loggedin'] != 1 && SX::object('Counter')->nobann == 0) {
$country_code = 'RU'; // По умолчанию лучше конечно оставить RU, тогда если ipinfo ответит криво или вообще не ответит, то пользователя все же пустит на сайт if ($response !== false) { $data = json_decode($response, true); $country_code = $data['country'] ?? $country_code; }
if ($country_code !== 'RU') { $period = 86400; $stime = time(); $end = $stime + $period; $row = $this->_db->fetch_object("SELECT Id FROM " . PREFIX . "_banned WHERE Ip = '" . IP_USER . "' AND Aktiv = '1' LIMIT 1"); if (is_object($row)) { $this->_db->query("UPDATE " . PREFIX . "_banned SET TimeEnd = '" . $end . "' WHERE Ip = '" . IP_USER . "' AND Aktiv = '1' LIMIT 1"); SX::setLog('Автоматическое продление системой безопасности нахождения пользователя с адресом ' . IP_USER . ' в бан-листе', '3', $_SESSION['benutzer_id']); Arr::setCookie('welcome', IP_USER, $period); } else { $insert_array = array( 'Reson' => 'Система безопасности выявила робота и заблокировала', 'Type' => 'autobann', 'TimeStart' => $stime, 'TimeEnd' => $end, 'Ip' => IP_USER, 'Aktiv' => '1'); $this->_db->insert_query('banned', $insert_array); SX::setLog('Автоматическое добавление системой безопасности пользователя с адресом ' . IP_USER . ' в бан-лист', '3', $_SESSION['benutzer_id']); Arr::setCookie('welcome', IP_USER, $period); } } }
Пока не пользовал, но судя по коду для версии 1.06 ... Пока мутузю код от SxGeo, чтоб универсально... В общем что-то не так: 1.создал папку GEO туда поместил SxGeo.php и SxGeo.dat 2.в код html внедрил
Проверьте что в $_SERVER['DOCUMENT_ROOT'], там может быть полная хрень, все зависит от настроек сервера Проще использовать SX_DIR, добавив проверку перед вашим кодом
PHP-код
if (!defined('SX_DIR')) { define('SX_DIR', realpath(dirname(dirname(__FILE__)))); }