3

通常我们使用验证码来验证表单不是由机器人或脚本提交的。但是在我们的应用程序中,我们不能到处都是验证码..

可以使用什么策略来验证请求来自我们自己的表单,而不是重复/组装的表单?

特别适用于 jsp/servlet。虽然我说的是策略而不是技术。

4

5 回答 5

5

一种方法是在 html 表单中嵌入一些安全令牌作为请求参数。您可以使用各种算法来生成安全令牌。就像根据一些随机数和会话 ID 生成安全令牌,这样如果黑客也窃取会话,他将无法访问您应用程序中的资源

于 2013-05-10T04:52:17.277 回答
3

听起来您担心跨站点请求伪造攻击 (CSRF)。

如果是这种情况,则存在一些框架,可以在每个表单中包含一个随机令牌作为隐藏字段,由服务器验证。我将开始为您的特定平台寻找 CSRF 保护方法。

于 2013-05-22T23:30:42.853 回答
2

还有两种可能:

  1. 您可以在表单中添加一个蜜罐输入字段,使用 CSS 规则将其设置为对人类用户不可见 - display:none. 为输入字段命名,例如“电子邮件”。您可以在服务器端验证该字段是否为空白,因为人类不会看到它。拒绝任何在该字段中包含值的提交,因为机器人可能会在您的蜜罐字段中提供虚假电子邮件地址。

  2. 当 .jsp 呈现时,您可以在表单中呈现隐藏的时间戳字段。检查提交表单时返回的时间戳。人们通常需要几秒钟来阅读表格并填写每个字段。从请求表单到机器人进行 POST 提交的时间,机器人提交将非常快。

于 2013-05-16T18:36:01.433 回答
1

这可能有点复杂,但您可以设计一种算法,根据时间戳的刻度来更改令牌。因此,用户获得了一个令牌,应用程序也记录了时间。然后,该算法根据定义的(秘密)模式更改令牌。然后,当提交表单时,您分析初始登录和某人提交表单之间的令牌和时间戳增量,以确保两件事。1. 你的 delta 是人类可能的。以及 2. 模式与令牌和时间戳之间的匹配。

于 2013-05-21T22:19:54.910 回答
0

我的拙见是,您对此进行了过度分析。不幸的是,没有任何解决方案是 100% 万无一失的。即使是验证码也不是 100% 可靠的,而且它们的黑客攻击是公开的。甚至基于声音的验证码也被破解了。其他人在这里发布的答案是不错的选择。从它们开始,看看有多少不良请求被过滤掉。如果他们过滤掉了 90% 的错误请求,您只需要分析和学习其余 10% 的模式,并提出可以解决这些问题的点解决方案(IP 过滤、限制等)。

您无法阻止 100% 的错误请求在 100% 的时间内访问您的服务器。您只需尽力防止它们并制定减轻损害的计划即可。

于 2013-05-17T17:47:38.530 回答