2

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

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

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

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

谢谢阿兰

4

2 回答 2

1

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

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

于 2010-05-08T01:43:06.217 回答
1

另一种方法是将基于唯一请求的令牌放在您存储在会话范围内的表单的隐藏字段中,然后在提交表单时进行比较。这将过滤掉那些不维护会话并且已经非常多的机器人。

更进一步,您可以向基于请求的令牌添加时间戳,然后检查表单是否在合理的时间内提交,例如 5 秒(至少是普通人可以输入和提交表单的最快时间)。这将过滤掉另一个通常在亚秒内立即填写并提交表单的机器人。这样做的另一个优点是,如果是一个非常聪明的机器人,它会被迫通过触发大量后续请求来更轻松地处理它。

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

于 2010-05-08T02:22:51.473 回答