2010-05-08 3 views
2

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

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

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

Надеется, что это все понятно, так как я не английский ...

Благодаря Алена

+0

Требуется ли ваша веб-служба или веб-сайт для аутентификации? Может ли кто-нибудь зарегистрироваться и создать учетную запись, или это требует какого-либо одобрения? Если вы решите проблему доступа, вы можете предотвратить ботов. Если ваш сайт открыт для мира, тогда вы можете сделать что-то трудным, а не невозможным. –

+0

Спасибо за ваш интерес. Да, мой сайт является публичным, и он должен оставаться открытым. Но можно также создать учетную запись, чтобы получить больше услуг. Чтобы создать учетную запись, система выполнит проверку по электронной почте (отправив электронное письмо на указанный адрес, чтобы убедиться, что это хороший адрес электронной почты). И у меня также есть CAPTCHA для создания этой учетной записи. Говоря о CAPTCHA, это будет мое единственное реальное безопасное решение, так как мой сайт должен оставаться открытым? Или боты теперь достаточно хороши, чтобы читать CAPTCHA? – Alain

ответ

1

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

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

+0

+1 для общих IP-адресов. Не говоря уже о том, что кто-то может просто заплатить, чтобы получить много IP-адресов или использовать ботов, что делает невозможным остановить «сборку». Лучше ограничивайте приложение людьми, которым доверяют, или ограничивайте их, что они видят. –

1

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

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

Я бы по крайней мере не полагался на IP-адрес. Он имеет слишком много внешних факторов.

+0

Но он хочет предотвратить атаку _targeted_, и в этом случае «коллекционер», вероятно, сможет обойти эти контрмеры. –

+0

@ Longpoke: Было бы нелегко это понять :) Знаете ли вы, что лучше? – BalusC

+0

Большое спасибо за ваш ответ. Но я просто хочу убедиться, что правильно понимаю. В моей форме я помещаю скрытое поле в свою форму с меткой времени, и я сохраняю то же значение в сеансе. Когда форма отправляется, я сравниваю значение скрытого поля, представленного со значением, которое находится в сеансе. И если значение меньше 5 или 10 секунд, тогда я могу показать CAPTCHA, чтобы остановить бота прямо там. Не могли бы вы подтвердить, что я правильно понял ваше решение? Спасибо – Alain

 Смежные вопросы

  • Нет связанных вопросов^_^