2010-05-08 35 views
2

我正在构建一种注册表的应用程序。想想字典:你查找一个单词,如果找到该单词,它会返回一些内容。现在,该注册管理机构将存储有关公司的宝贵信息,并且有些人可能会想要获得完整的列表。我的应用程序使用回复到WS的EJB 3.0。防止机器人多次查询我的数据库

所以我想每个IP地址每天最多允许10个查询。将IP地址和计数器存储在桌面上,每晚将由脚本清空。

这样做是一个好主意吗?如果是的话,我怎样才能在EJB端获得IP地址? 有没有更好的方法来防止某些东西从我的数据库中获取所有数据? 虽然关于CAPTCHA,但我认为这对用户来说是一种痛苦,有时甚至对于真正的人来说也很难阅读。

希望这一切都清楚,因为我不是英语......

感谢 阿兰

+0

您的web服务或网站是否需要验证?任何人都可以注册并创建一个帐户,还是需要某种类型的批准?如果你解决了访问问题,你可以防止机器人。如果你的网站是开放的,那么你只能让事情变得困难,而不是不可能。 – 2010-05-08 03:03:07

+0

感谢您的关注。是的,我的网站是公开的,它需要保持公开。但也可以创建一个帐户来获得更多的服务。要创建一个帐户,系统会进行电子邮件验证(发送电子邮件到提供的地址以验证它是一个好的电子邮件地址)。而且我还拥有关于该账户创建的CAPTCHA。谈到CAPTCHA,这是我的唯一真正安全的解决方案,因为我的网站需要保持公开?或者机器人现在已经足够阅读CAPTCHA了? – Alain 2010-05-08 03:08:36

回答

1

我说每一天IP查询10的极限不是很好。考虑到许多人可能共享相同的公共IP。

虽然它不是100%准确的,但您可以分析在短时间内是否有异常数量的请求来自同一个IP。如果您的闹钟响起,您会显示一个验证码。

+0

+1共享IP地址。更何况有人可能只是为了获得大量的IP地址而付费,或者使用机器人,这使得停止“收集”几乎是不可能的。更好地将应用限制在受信任的人员或限制他们可以看到的位置。 – 2010-05-08 02:11:47

1

另一种方法是将独特的基于请求的令牌放入存储在会话范围中的表单的隐藏字段中,然后比较表单的提交情况。这将过滤出不会维护会话的僵尸程序,并且已经非常多。

更进一步,您可以添加一个时间戳到基于请求的标记,然后检查表单是否在合理的时间内提交,例如, 5秒(至少是正常人可以输入并提交表格的最快时间)。这将过滤掉通常会立即填写并在亚秒内提交表单的另一个漫游器。这样做的另一个优点是,如果发现很多智能机器人,那么它就会被迫轻松解决很多后续请求。

我至少不会依赖IP地址。它带有太多的外部干扰因素。

+0

但他想阻止_targeted_攻击,在这种情况下,“收集器”可能会绕过这些对策。 – 2010-05-08 02:25:47

+0

@Longpoke:弄清楚这一点并不容易:)那么你知道更好的方法吗? – BalusC 2010-05-08 02:26:42

+0

非常感谢您的回答。但我只是想确保我理解正确。 在我的表单上,我在表单上放置了一个隐藏字段,其中包含时间戳,并且我在该会话中存储了相同的值。提交表单时,我会将提交的隐藏字段的值与会话中的值进行比较。如果这个值小于5或10秒,那么我可以显示一个CAPTCHA来停止机器人。 您能否确认我理解正确的解决方案? 谢谢 – Alain 2010-05-08 03:00:25