#php #форма
Есть простая форма ввода пароля. Как удваивать время обработки формы для одного ip. Поможет ли это защититься от спамеров и ботов ?
Ответы
Ответ 1
В сессии храните счётчик неудачных попыток, и ставьте sleep( pow(2,$count)) — с каждой попыткой пауза будет всё больше: 2, 4, 8, 16с ... После 10 неудачных блокируйте сессию, после 3 десятков разных заблокированных сессий с одного ip — блокируйте ip (значит, злодей догадался сбрасывать куки). При общем резком росте числа неудачных попыток по сайту, либо пересмотрите код, либо паникуйте : ) Upd. Одно лишь это удваивание времени каждый раз не сильно поможет от ботов. В Joomla, например, делается так. Выдавая форму для ввода пароля, сайт создаёт сессию, и генерит неий уникальный параметр, который сохраняется в сессии. Он же пишется в виде скрытого в форме для пароля. Пришли данные на логин — смотрим, соответствует ли тот скрытый параметр тому значению, что сохранено в сессии. Если нет — такой запрос можно не обрабатывать дальше. Либо это бот, либо отключены куки.Ответ 2
Можно без удваивания, поставить sleep на несколько секунд Второй вариант - замерить время обработки (тем же time() в начале и конце обработки), а после поставить sleep/usleep/time_nanosleep с количество времени, потраченном на обработку формы.Ответ 3
Как вариант, хранить время генерации формы, и сравнивать с временем когда данные от формы пришли. Если например прошло меньше 3 секунд, значит это отправил спамер, или бот ) Время можно например: записывать в базу (предпочтительне) хранить в сессии, куках записывать в скрытое поле формы (тут лучше еще защититься, и добавить хитрый хэш от времени, если хэш от пришедшего времени не совпадает с хэшем то дату поменяли)Ответ 4
проверяем ip и session если нету такого пишем в базу ip и session Выполняем скрипт делаем response с флагом done = true на фронтэнде если пришел done as true на кнопку submit ставим disabled
Комментариев нет:
Отправить комментарий