Функция 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 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Article multicategories

Additional categories where this article is shown as similar.

Content author

Administrator

Offline

Administrator

Last logged: 2026-09-13 14:50

  • Page published: 2025-01-23 11:09
  • Last update: 2025-01-23 11:09