防止机器人多次查询我的数据库

时间:2010-05-08 01:33:45

标签: java security ejb-3.0 bots

我正在构建一个应用程序,它是一种注册表。想想字典:你查找一个单词,如果找到单词,它会返回一些内容。现在,该注册表将存储有关公司的有价值的信息,有些人可能想要获得完整的列表。我的应用程序使用回复WS的EJB 3.0。

所以我在考虑允许每天每个IP地址最多10个查询。将IP地址和计数器存储在每晚都会被脚本清空的表格上。

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

希望一切都清楚,因为我不是英国人......

由于 阿兰

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

另一种方法是将一个基于请求的唯一令牌放在您存储在会话范围内的表单的隐藏字段中,然后在提交表单时进行比较。这会过滤掉那些没有维持会话的僵尸程序,而且已经很多了。

为了更进一步,您可以为基于请求的令牌添加时间戳,然后检查表单是否在合理的时间内提交,例如5秒(至少是普通人可以输入并提交表格的最快时间)。这将过滤掉另外的机器人,这些机器人通常会立即填充并在亚秒内提交表单。这样做的另一个好处是,在非常智能机器人的情况下,它会被迫通过发送大量后续请求来更轻松。

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