如何验证授权表单提交

时间:2013-05-10 03:45:18

标签: jsp servlets architecture authorization

通常我们使用验证码验证表单不是由机器人或脚本提交的。 但在我们的应用程序中,我们无法在任何地方使用验证码。

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

特别适用于jsp / servlet。虽然我在谈论战略而不是更多关注技术。

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

听起来你担心Cross-site Request Forgery攻击(CSRF)。

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

答案 2 :(得分:2)

还有两种可能性:

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

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

答案 3 :(得分:1)

这可能有点复杂,但您可以设计一种算法,根据时间戳的刻度更改令牌。因此,向用户发出令牌,应用程序也会记录时间。然后,算法基于定义的(秘密)模式来改变令牌。然后,在提交表单时,您将分析令牌和初始登录之间的时间戳增量,以及有人表单提交时确保两件事。你的三角洲是人类可能的。 2.模式匹配令牌和时间戳之间。

答案 4 :(得分:0)

我的拙见是你在分析这个。不幸的是,没有任何解决方案可以100%傻瓜证明。甚至验证码也不是100%可靠,而且它们的黑客攻击是公开的。甚至基于声音的验证码也被打破了。其他人在这里发布的答案是很好的选择。从它们开始,看看有多少坏请求被过滤掉了。如果他们过滤掉了90%的不良请求,你只需要分析并学习其余10%的模式,并提供解决方案(IP过滤,限制等)来解决这些问题。

您无法阻止100%的错误请求在100%的时间内到达您的服务器。你只是尽力阻止它们并制定减轻损害的计划。