Функция 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-адрес на некоторое время, чтобы предотвратить дальнейшие атаки.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-23 11:09
- Last update: 2025-01-23 11:09