Функция cot_shield_hammer в Cotonti

Она анализирует количество запросов, выполненных пользователем, и если это количество превышает заданный лимит, блокирует пользователя на определенный период.

Функция cot_shield_hammer

Давайте разберем параметры функции cot_shield_hammer.

Параметры функции:
 
function cot_shield_hammer($hammer, $action, $lastseen)
$hammer:

Тип: int
Описание: Этот параметр представляет собой количество попыток "хаммеринга" (слишком частых запросов) текущего пользователя. Он отслеживает, сколько раз подряд был выполнен запрос от данного пользователя за короткий промежуток времени.
Роль: Он используется для подсчета частоты запросов. Если количество запросов (попыток) превышает заданный лимит, то пользователь может быть заблокирован. Значение этого параметра увеличивается при каждом запросе и уменьшается, если между запросами проходит достаточно времени.
$action:

Тип: string
Описание: Этот параметр указывает тип действия, которое выполняет пользователь. В контексте этой функции ожидается, что он может иметь значение 'Hammering', что сигнализирует о том, что пользователь осуществляет слишком частые запросы.
Роль: Он определяет, нужно ли выполнять защитные меры (например, блокировать пользователя). Если значение $action равно 'Hammering', это значит, что пользователь уже пытается выполнить слишком много запросов за короткий период, и система должна активировать защиту.
$lastseen:

Тип: int
Описание: Это временная метка (в формате Unix timestamp), которая указывает, когда пользователь был в последний раз замечен системой. Это значение помогает системе отслеживать, прошло ли достаточно времени с момента последнего запроса пользователя.
Роль: Используется для расчета времени, прошедшего с последнего запроса. Если время, прошедшее с последнего действия, меньше заданного порога (в данном случае 4 секунды), то увеличивается счетчик попыток хакерской атаки (hammer). Если прошло больше времени, счетчик попыток уменьшается.

Резюме:
$hammer отслеживает количество попыток в рамках атаки "хаммеринг".
$action определяет, нужно ли применять защитные меры, в зависимости от того, является ли текущее действие пользователя "Hammering".
$lastseen помогает вычислить, прошло ли достаточно времени с момента последнего запроса для того, чтобы сбросить или уменьшить количество попыток.
Эти параметры совместно помогают реализовать защиту от атак с частыми запросами от одного пользователя.

 
/**
 * Anti-hammer protection
 *
 * @param int $hammer Hammer rate
 * @param string $action Action type
 * @param int $lastseen User last seen timestamp
 * @return int
 */
function cot_shield_hammer($hammer, $action, $lastseen)
{
    global $cfg, $sys;

    // Проверяем, если текущее действие - "Hammering" (много попыток за короткое время)
    if ($action == 'Hammering') {
        // Активируем защиту
        cot_shield_protect();
        // Очищаем текущее действие в системе защиты
        cot_shield_clearaction();

        // Если плагин "hits" активирован
        if (cot_plugin_active('hits') ) {
            // Проверяем, загружена ли функция для учета статистики
            if (!function_exists('cot_stat_inc')) {
                // Загружаем файл плагина "hits", если функция еще не загружена
                require_once cot_incfile('hits', 'plug');
            }
            // Увеличиваем счетчик анти-хака
            cot_stat_inc('totalantihammer');
        }
    }

    // Проверяем, если прошло меньше 4 секунд с последнего действия пользователя
    if ((Cot::$sys['now'] - $lastseen) < 4) {
        // Увеличиваем счетчик попыток "Hammering"
        $hammer++;
        // Если количество попыток превышает установленные в конфигурации пределы
        if ($hammer > Cot::$cfg['shieldzhammer']) {
            // Обновляем статус защиты и блокируем пользователя на 3 минуты
            cot_shield_update(180, 'Hammering');
            // Логируем событие бана IP из-за слишком частых попыток
            cot_log('IP banned 3 mins, was hammering', 'sec', 'hammer', 'error');
            // Сбрасываем счетчик попыток
            $hammer = 0;
        }
    } else {
        // Если прошло больше 4 секунд, уменьшаем счетчик попыток
        if ($hammer > 0) {
            $hammer--;
        }
    }

    // Возвращаем обновленный счетчик попыток
    return $hammer;
}

Разбор и комментарии:

Общее описание: Эта функция реализует защиту от "хаммеринга", т.е. слишком частых запросов от одного пользователя за короткий промежуток времени. Она анализирует количество запросов, выполненных пользователем, и если это количество превышает заданный лимит, блокирует пользователя на определенный период.

Комментарии и пояснения:

Первое условие (проверка действия "Hammering"):

 
if ($action == 'Hammering') {
    cot_shield_protect();
    cot_shield_clearaction();
    
    
Если текущее действие пользователя — это "Hammering" (что обычно означает, что он слишком часто отправляет запросы), то активируется защита (cot_shield_protect()) и очищается текущее действие (cot_shield_clearaction()).
Активность плагина "hits":

 
if (cot_plugin_active('hits') ) {
    if (!function_exists('cot_stat_inc')) {
        require_once cot_incfile('hits', 'plug');
    }
    cot_stat_inc('totalantihammer');
}


Если плагин "hits" активирован, и функция для учета статистики еще не загружена, она будет загружена с помощью require_once. Затем увеличивается счетчик анти-хака для отслеживания защищенных запросов.
Проверка времени последнего действия:

 
if ((Cot::$sys['now'] - $lastseen) < 4) {
    $hammer++;
    
    
Если с последнего действия пользователя прошло меньше 4 секунд, то увеличивается счетчик попыток ("hammer").
Проверка превышения лимита попыток:

 
if ($hammer > Cot::$cfg['shieldzhammer']) {
    cot_shield_update(180, 'Hammering');
    cot_log('IP banned 3 mins, was hammering', 'sec', 'hammer', 'error');
    $hammer = 0;
}


Если количество попыток превышает установленный предел, то вызывается функция cot_shield_update, которая блокирует пользователя на 3 минуты. Также записывается лог о бане IP за попытки "hammering".
Уменьшение количества попыток:

 
} else {
    if ($hammer > 0) {
        $hammer--;
    }
}


Если с последнего действия прошло более 4 секунд, счетчик попыток уменьшается, что позволяет избежать блокировки за редкие запросы.
Роль функции: Функция cot_shield_hammer играет важную роль в защите от атак с использованием слишком частых запросов (например, брутфорс-атак). Она отслеживает частоту запросов, и если этот лимит превышен, блокирует IP-адрес на некоторое время, чтобы предотвратить дальнейшие атаки.

 

4 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 23.01.2025 11:09
  • Последнее обновление: 23.01.2025 11:09