Доброе утро, Гость! Представляем Вам наши форумы. Вы можете зарегистрироваться чтобы писать на форумах или зайдите под своим именем, если Вы уже регистрировались.
   
   


Форум
 SX CMS / Техническая помощь
         запретить доступ к сайту для иностранных IP адресов

Похожие темы

запретить доступ к сайту для иностранных IP адресов


События Среда, 23.04.2025, 22:34

NAME

Группа: Пользователь
Ранг: Продвинутый
Cообщений: 140
Регистрация: 11.03.2010
Город: AREA51
Все привет.
Может кто подскажет как адаптировать код под статус, версия 1,05
Спойлер

Код

// Получаем текущий URL страницы
$request_uri = $_SERVER['REQUEST_URI'];

// Если это главная страница (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 запросов

// Инициализация CURL для запроса
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

// Проверяем, был ли успешный ответ от 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;
}





Пользователь офлайн
События Четверг, 24.04.2025, 12:06

SX

Группа: Администратор
Cообщений: 3018
Регистрация: 23.10.2009
Ниже вариант с добавлением в систему бана cms. Проверяет только не авторизованных. Проще сделать из этого виджет, код запроса взят из виджета антибот. Изложен принцип, код не тестировал. Тексты естественно в запрос свои пишем


PHP-код


if ($_SESSION['loggedin'] != && SX::object('Counter')->nobann == 0) {

    
$api_url 'http://ipinfo.io/' IP_USER '?token=ВАШ_ТОКЕН';

    
$response false;
    if (
$ch curl_init()) {
        
curl_setopt($chCURLOPT_URL$api_url);
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
$response curl_exec($ch);
    }

    
$country_code 'RU'// По умолчанию лучше конечно оставить RU, тогда если ipinfo ответит криво или вообще не ответит, то пользователя все же пустит на сайт 
    
if ($response !== false) {
        
$data json_decode($responsetrue);
        
$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);
            }
    }
}



Благодарности NAME
Пользователь офлайн
События Четверг, 24.04.2025, 15:52

NAME

Автор текущей темы
Группа: Пользователь
Ранг: Продвинутый
Cообщений: 140
Регистрация: 11.03.2010
Город: AREA51
Пока не пользовал, но судя по коду для версии 1.06 ...
Пока мутузю код от SxGeo, чтоб универсально...
В общем что-то не так:
1.создал папку GEO туда поместил SxGeo.php и SxGeo.dat
2.в код html внедрил
Спойлер

PHP-код

include_once($_SERVER['DOCUMENT_ROOT']."/geo/SxGeo.php"); 
$SxGeo = new SxGeo('/geo/SxGeo.dat'SXGEO_BATCH SXGEO_MEMORY); 
$ip=$_SERVER['REMOTE_ADDR']; 
$country $SxGeo->getCountry($ip);
unset(
$SxGeo); 
if(
$country!='RU'
{ die(
'Доступ запрещен!'); }

не хочет работать! Уже абсолютные пути всяко поменял...


Пользователь офлайн
События Пятница, 25.04.2025, 10:38

SX

Группа: Администратор
Cообщений: 3018
Регистрация: 23.10.2009
Нет код для 1.05

Проверьте что в $_SERVER['DOCUMENT_ROOT'], там может быть полная хрень, все зависит от настроек сервера
Проще использовать SX_DIR, добавив проверку перед вашим кодом
PHP-код

if (!defined('SX_DIR')) {
    
define('SX_DIR'realpath(dirname(dirname(__FILE__))));
}



Пользователь офлайн


Похожие темы  |   Следующая тема

Быстрый переход:  
 

 Сейчас на сайте

Пользователей: 0, Гостей: 5

Поисковые боты: 40
oBot(5), BingBot(6), Bot(28), Crawler
 Статистика форума

  Темы Сообщения Пользователи
За сутки:
За неделю:
За месяц:
Всего:
Мы приветствуем нового участника: vasya111
 Дни рождения

Marley (77), Chinare Hesenova (40), palekhoff (33)
Copyright © 2009 - 2024 SX All rights reserved | Powered by SX CMS 1.06 UTF | Контакты