[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ограничение на запрос к бд
Tapak
Как ограничить пользователя, хотя бы по ip, если он не зарегистрирован, по запросам к бд. Час гуглил, гуглил, нашел вот это -
        ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
waldicom
Насколько я понимаю, стандартными средставами такое не сделать.
MySQL конечно может ограничивать количесво коннектов или запросов за определенный промежуток времени, но там речь идет о другом пользователе.

В твоем случае - если запросы выполня.тся напрямую - то дело хреново... А если естькакая-то обертка - то проверять ограничение в ней.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Tapak
Функция самая обычная должна быть. Есть кнопка поиска по бд - запрос может выполнять не чаще чем раз в 15 секунд.
Как реализовано на форуме phpforum.ru если часто обновляешь страницу , пишется "траляля";
hydrogen
Под "пользователем" понимается пользователь БД или посетитель сайта?
rolleyes.gif

Судя по вашему последнему посту - второе. При чем здесь БД? Ограничивать надо доступ посетителя к функции поиска, БД там вообще никаким боком.

_____________
Tapak
Как тогда установить интервал между запросами?
Valick
Цитата
Ограничивать надо доступ посетителя к функции поиска, БД там вообще никаким боком.

Немного некорректная постановка ответа. БД там как раз боком, точнее "побоку" именно по поиску. Но функция организации поиска может хранить интервалы времени запросов от пользователя либо в сессии либо как раз в БД. И если последующий запрос пришел раньше чем истекло ограничение (допустим 15 сек), то к поиску пользователь уже не будет допущен.
Естественно это для зарегистрированных пользователей прошедших авторизацию.
Можно и по ip (грубый и плохой вариант), но в таком случае "под горячую руку" могут попасть невиновные, а вот особо одаренные могут и прокси воспользоваться. Но это уже попахивает DDOS, а от этого уже на уровне сервера или даже железа надо защищаться, а то и "жирностью" канала.

_____________
Стимулятор ~yoomoney - 41001303250491
Valick
Цитата
Как тогда установить интервал между запросами?

просто регистрируете метку времени первого запроса либо в сессии либо в бд (я люблю в бд), и сравниваете с меткой времени последующих запросов, если время больше указанного периода, то обновляете метку времени и допускаете пользователя к поиску.


_____________
Стимулятор ~yoomoney - 41001303250491
Tapak
Спасибо, к сожалению, ничего нового. Тогда через сессии пока сделаю. Возможно кто-то из гуру появится и подскажет.
Valick
Цитата
Возможно кто-то из гуру появится

А я вам значит не канаю? smile.gif
Вы спросили:
запрос может выполнять не чаще чем раз в 15 секунд.
Как реализовано на форуме phpforum.ru если часто обновляешь страницу , пишется "траляля"

Вот я вам и ответил как. Какого вам еще гуру надо? smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
hydrogen
Цитата
Немного некорректная постановка ответа. БД там как раз боком, точнее "побоку" именно по поиску. Но функция организации поиска может хранить интервалы времени запросов от пользователя либо в сессии либо как раз в БД


Ну при чем же здесь это? ) Речь о том, что доступ к базе данных ограничивать никак не надо. Хотя бы потому, что у посетителя доступа к базе и так нет.

А чем через сессии плохо? Вариант с IP, на мой взгляд, не самый лучший. Если все так сурово, давайте доступ к поиску только для авторизованных товарищей. Можно id сессии еще пихать в LSO.

Либо блокировку по IP можно сделать чуть "поинтеллектуальнее" и бородить только посетителей, с IP которых приходит аномально много запросов, и у которых с момента инициализации сессии прошло меньше времени, чем заданное ограничение по поиску.

_____________
hydrogen
Либо сделать проще: не заморачиваться с IP, а давать доступ к поиску только авторизованным и тем, у кого сессия открыта уже дольше XX секунд.

_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.