Запретить ботам запрашивать мою базу данных несколько раз


Я создаю приложение, которое является своего рода реестром. Подумайте о словаре: вы ищете Слово, и оно возвращает что-то, если слово найдено. Теперь этот реестр будет хранить ценную информацию о компаниях, и у некоторых может возникнуть соблазн получить полный список. Мое приложение использует EJB 3.0, который отвечает на WS.

Поэтому я думал о разрешении максимум 10 запросов на IP-адрес в день. Хранение IP-адреса и счетчика на столе, который будет пусто по сценарию каждую ночь.

Является ли это хорошей идеей / практикой? Если да, то как я могу получить IP-адрес на стороне EJB? Есть ли лучший способ предотвратить что-то, чтобы получить все данные из моей базы данных? Я также думал о CAPTCHA, но я думаю, что это боль для пользователя, и иногда они трудно читаются даже для реального человека.

Надеюсь, все ясно, поскольку я не англичанин...

Спасибо Ален

2 2

2 ответа:

Я бы сказал, что ограничение в 10 запросов в день на IP-адрес не очень хорошо. Примите во внимание, что многие люди могут совместно использовать один и тот же публичный IP.

Хотя это не 100% точно, вы можете проанализировать, если необычное количество запросов поступает с одного и того же IP-адреса за короткий промежуток времени. В случае, если ваш сигнал тревоги звучит, вы показываете капчу.

Альтернативой является помещение уникального маркера запроса в скрытое поле формы, которое вы храните в области сеанса, а затем сравниваете его при отправке формы. Это отфильтрует ботов, которые не поддерживают сеанс, и это уже довольно много.

Чтобы сделать следующий шаг, вы можете добавить временную метку к маркеру запроса, а затем проверить, отправлена ли форма в течение разумного времени, например, 5 секунд (по крайней мере, самое быстрое время, которое нормальный человек может ввести и отправить форму). Это отфильтрует других ботов, которые обычно мгновенно заполняют и отправляют форму в субсекунду. Еще одним преимуществом этого является то, что в случае очень умного бота, который затем вынужден принимать его более легким с большим количеством последующих запросов.

Я бы, по крайней мере, не полагался на IP-адрес. Он приходит с слишком большим количеством внешних возмущающих факторов.