身份验证流程步骤顺序和验证码功能

时间:2014-01-08 16:04:22

标签: security authentication spring-security forms-authentication captcha

我没有找到任何好的参考资料,其中定义了身份验证的步骤(至少是步骤顺序)。

更具体地说,我感兴趣的是应该采取哪些步骤:

  1. 用户名验证(是否找到用户名);
  2. 密码验证;
  3. 凭据已过期或未过期。
  4. Credentails是暂时的还是非暂时的
  5. 验证码。
  6. 据我所知,在特定情况下,这些步骤的顺序并不那么重要,但一般来说,了解这些建议会很好。甚至为了为系统创建合适的用例。

    例如,它可以以不同的方式设计:

    1. 系统只能提供用户名或密码不正确的一般信息。如果验证码不正确,则消息将相同。

    2. 系统可以提供更多不同的消息。例如,不正确的验证码将提供类似于“输入错误的验证码”的消息; 用户名或密码错误消息将是“用户名或密码不正确”。 (我不确定表单安全性是否正常)

    3. 问题是哪个用例更好? (最好通过适当的参数提供一些证据,证明这样做更好。)

1 个答案:

答案 0 :(得分:0)

这取决于很多原因。但我会这样做:

<强>客户机侧

  1. 如果需要,请检查一般要求,例如用户名和密码长度,并提示用户,这可以在javascript中完成。
  2. 不要忘记此代码将是公开的,这意味着黑客会在执行攻击时看到此要求并将其记入帐户。

    <强>了Serverside

    1. 验证码。首先执行此操作,因为如果此操作失败,则无需使用您的数据库进行查找。(可能您在此处使用某种第三方服务)

    2. 用户名和密码检查,因为这是第二个最常见的失败。

    3. 凭据已过期或未过期且Credentails是暂时的或非暂时的,任何订单。


    4. 很高兴知道:

      2和3也可能(取决于您的架构)在一个单一的数据库查找中完成。如果您使用SQL数据库,请不要忘记使用prepared statements

      如果有些东西可疑,你也可以做很多服务器端来检测攻击企图并限制权限。例如,X登录尝试失败后临时禁止用户帐户。存储IP地址并将其与位置匹配。例如,美国用户10分钟后从中国登录是可疑行为(Facebook和其他人这样做)。

      确保您确切知道您在客户端和服务器端执行的操作以及执行顺序。一个好主意可以是绘制信息流图。并使用拦截代理查看发送的内容。是否明确发送密码?(使用ssl并在客户端哈希它们,而不是说你不再哈希它们(和盐)服务器端,以便该方法尽可能保密)