Смысл от антифлуда

DarksLight2

Знаток
⚖️
📜
Сообщения
410
Реакции
119
Написал вот такой класс, теперь думаю, если ли от него смысл. Подскажите, что думаете по поводу этой какахи, будет смысл использовать ее? И дайте советы по усовершенствованию этой какахи :)
PHP:
<?php

class AntiFlood
{
    public static function run($queriesPerSecond = 10)
    {
        self::show_error();

        if( ! isset($_SESSION['AntiFloodError'])) {
            if (!isset($_SESSION['AntiFloodFirst'])) {
                $_SESSION['AntiFloodFirst']['time'] = time();
                $_SESSION['AntiFloodFirst']['connections'] = 1;
            } elseif (time() - $_SESSION['AntiFloodFirst']['time'] <= 1)
                $_SESSION['AntiFloodFirst']['connections'] += 1;
            else {
                if ($_SESSION['AntiFloodFirst']['connections'] >= $queriesPerSecond)
                    $_SESSION['AntiFloodError'] = time() + 10;
                unset($_SESSION['AntiFloodFirst']);
            }
        }
    }

    private static function show_error()
    {
        if($_SESSION['AntiFloodError'] > time()) {
            header($_SERVER["SERVER_PROTOCOL"] . '429 Too Many Requests');
            echo 'Вы слишком часто обновляете страницу!';
            die;
        } else {
            unset($_SESSION['AntiFloodError']);
        }
    }
}
 

habilis

Постигающий
🏆
📜
Сообщения
44
Реакции
34
Если по адрессу выполняются какие-то вычисления жосткие на проц сервака
или сама страница делает АПИ запрос на сторонний ресурс, то да смысл есть.

Чтобы Хабиля с пачанами на уроке информатики КТРЛ+Ф5 не за ДУДОСИЛ твой Саетег.

А ваще, такая ах*нная фича поддерживается многими норм фреймворками, пачаны с урока информатики сказали...
 

Bayer

Специалист
⚖️
🏆
📜
Сообщения
737
Реакции
250
Написал вот такой класс, теперь думаю, если ли от него смысл. Подскажите, что думаете по поводу этой какахи, будет смысл использовать ее? И дайте советы по усовершенствованию этой какахи :)
PHP:
<?php

class AntiFlood
{
    public static function run($queriesPerSecond = 10)
    {
        self::show_error();

        if( ! isset($_SESSION['AntiFloodError'])) {
            if (!isset($_SESSION['AntiFloodFirst'])) {
                $_SESSION['AntiFloodFirst']['time'] = time();
                $_SESSION['AntiFloodFirst']['connections'] = 1;
            } elseif (time() - $_SESSION['AntiFloodFirst']['time'] <= 1)
                $_SESSION['AntiFloodFirst']['connections'] += 1;
            else {
                if ($_SESSION['AntiFloodFirst']['connections'] >= $queriesPerSecond)
                    $_SESSION['AntiFloodError'] = time() + 10;
                unset($_SESSION['AntiFloodFirst']);
            }
        }
    }

    private static function show_error()
    {
        if($_SESSION['AntiFloodError'] > time()) {
            header($_SERVER["SERVER_PROTOCOL"] . '429 Too Many Requests');
            echo 'Вы слишком часто обновляете страницу!';
            die;
        } else {
            unset($_SESSION['AntiFloodError']);
        }
    }
}
Ну, Хабиля уже сказал все.
Типикал анти ф5 для страниц/файлов.
Я уже как то рассказывал о таком : Пару методов от ддоса
Кол-во обновления и время блока тоже можно ограничивать
 

DarksLight2

Знаток
⚖️
📜
Сообщения
410
Реакции
119
Это было сделано чтобы люди например в бою не могли быстро атаковать
 

DarksLight2

Знаток
⚖️
📜
Сообщения
410
Реакции
119
А как насчёт того, что это все сделано через сессии?
 

Bayer

Специалист
⚖️
🏆
📜
Сообщения
737
Реакции
250
А как насчёт того, что это все сделано через сессии?
Ну стандартных сессий вполне достаточно, смысла использовать session_set_save_handler()
нет. А вот если стоит вопрос безопасности и масштабирования, то скорей всего куки бы лучше подошли или свой обработчик написать, что бы лучше все контролировать и увеличить скорость работы
 

RoBoT

Некто
📜
Сообщения
16
Реакции
5
Увы ни сессия, ни куки для этого не подходят) лучше троттлингом пользоваться на основе уникального штампа: айпи пользователя + запрашиваемый метод + запрашиваемый домен. Возможно по другому сигнатуру клиента генерировать уникальную. Но суть в том, что ее подменить будет несколько сложнее чем отключить сохранение кук в которых хранится и сессия, и другие данные.

Далее хранить инкремент уже в кеше или базе с дальнейшей миграцией сработанного блока в кеш, или в редис'е.
Это будет эффективней.
 

DarksLight2

Знаток
⚖️
📜
Сообщения
410
Реакции
119
Но ведь пользователь не сможет быть авторизирован если отключены куки) Соответственно он не сможет попасть на страницу где этот класс используется) Л - логика)
 

DarksLight2

Знаток
⚖️
📜
Сообщения
410
Реакции
119
Но в кешу хранить это тоже не плохая идея) но все же, что если человек сменил ип? Кеша уже не будет и он сможет так же быстро кликать)
 

oxy

Знаток
🏆
📜
Сообщения
437
Реакции
104
Все зависит от того где это использовать и насколько вообще ты хочешь заморочиться этим. Ты вообще можешь на фронте снимать разрешение экрана, кол-во цветов, useragent, да все что угодно, headless режим браузера, плюс конечно ип, плюс вешать куку и т.д. Ну и таким образом сможешь довольно достоверно сказать что это тот же чел. Если он просто юзает какой то говнокурл можешь отсечь это в два счета. Хочешь, можешь сразу ответно чекать нмапом порты юзера, в реального чела обычно все закрыто. А у проксей и впнов есть специфические открытые порты. В сумме это даст тебе прямо таки 99% гарантию идентификации поциэнта. Вообще тема весьма обширная и если интересно можешь погуглить и посмотреть доклады бородатых мужиков
 
Сверху