Необходимо доработать API сделанное на modx, добавить блокировку по IP при частых запросах.

Добрый день.
Отвечать буду только людям с рейтингом на modx.

Описание
Есть мобильное приложение. В данный момент ошибочно (спам) было разослано более 50.000 смсок с приложения на различные номера телефонов.

Задачи
№1) Ограничения по IP backend
Первые 3 запроса с одного IP — раз в минуту.
После этого — раз в час.
И после 3-х в час — блокировка на день.

Нужно будет обновить UI, чтобы показывать ошибку 429 (слишком много запросов) и объяснять пользователю, что нужно подождать перед следующей попыткой.

№2) Ограничения по телефону — То же самое, только по номеру телефона.

В UI тоже нужно показывать ошибку 429, чтобы пользователи понимали, что нужно подождать.
anhel123
19 марта 2025, 10:26
modx.pro

Комментарии: 3

Николай Савин
19 марта 2025, 17:13
+1
Здравствуйте. Готового решения конечно же нет в рамках MODX. Но они есть в мире PHP.

Для регулирования частоты запросов к API в PHP можно использовать библиотеку php-ratelimiter или symfony/rate-limiter. Оба инструмента предоставляют удобные способы контроля и ограничения количества запросов за определённый промежуток времени.

К примеру вот так используется php-ratelimiter
use RateLimiter\RateLimiter;
use RateLimiter\Storage\FileStorage;

$storage = new FileStorage('/path/to/storage');
$limiter = new RateLimiter($storage, 100, 3600); // 100 запросов в час

$key = 'user_ip_or_api_key'; // Уникальный идентификатор (например, IP или API-ключ)
if ($limiter->check($key)) {
    // Запрос разрешён
    $limiter->increment($key);
} else {
    // Лимит исчерпан
    http_response_code(429);
    echo 'Too Many Requests';
    exit;
}
    Sergey (Sentinel)
    20 марта 2025, 13:48
    0
    Так а в самом API разве нет ограничений? По любому должна быть какая-то защита у сервиса
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3