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

Posted

技术标签:

【中文标题】身份验证流程步骤顺序和验证码功能【英文标题】:Authentication flow steps order and captcha functionality 【发布时间】:2014-01-26 20:24:05 【问题描述】:

我没有找到定义身份验证步骤的任何好的参考(至少步骤顺序)。

更具体地说,我感兴趣的步骤应该是什么顺序:

    用户名验证(是否找到用户名); 密码验证; 凭据已过期或未过期。 Credentails 临时或非临时 验证码验证。

我了解,在特定情况下,这些步骤的顺序并不那么重要,但通常最好了解这些建议。甚至是为了为系统创建适当的用例。

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

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

    系统可以提供更多不同的消息。例如,不正确的验证码将提供类似于“输入了不正确的验证码”的消息; 错误的用户名或密码信息将是“用户名或密码不正确”。 (我不确定从安全角度来看是否可以)

问题是什么用例更好? (最好提供一些证据证明使用适当的论据会更好)。

【问题讨论】:

【参考方案1】:

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

客户端

    如果需要,检查一般要求,例如用户名和密码长度并提示用户,这可以在 javascript 中完成。

不要忘记此代码将是公开的,这意味着黑客会看到此要求并在进行攻击时将其考虑在内。

服务器端

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

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

    凭证已过期或未过期,Credentails 临时或非临时,任何顺序。


很高兴知道:

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

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

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

【讨论】:

显示验证码错误的消息是否有效(从安全角度来看)(或者有一些建议只显示一条消息)?因为在凭据过期的情况下,建议不要显示凭据已过期的消息。 我不会显示客户端触发的错误验证码警告,智能机器人可以轻松适应这一点。让请求被发送到服务器以便它可以被记录。此外,如果您检查验证码客户端,任何恶意用户都可以完全看到该代码。它可能会被混淆,但他们仍然可以进行逆向工程。 还有一个关于偏好的问题:)。如果在特定用户尝试 10 次失败后显示验证码,您会更改建议的步骤顺序吗?因为在这种情况下,您还需要进行数据库查找(并且此操作会比凭据检查更昂贵)? 您能否提供一些链接,而不是显示有关不正确验证码的消息是不可取的(因为对我而言,它并没有为黑客 [bot] 提供更多价值)? 我不会这样做,因为那样你就必须做一个特殊的功能数据库来保存登录尝试和用户名,至少。然后,在进行其他查找之前,必须始终检查该数据库。我会首先检查验证码,然后在一次选择操作中获取与用户相关的所有信息,然后系统地检查案例:临时禁止?有效的usn和pass?

以上是关于身份验证流程步骤顺序和验证码功能的主要内容,如果未能解决你的问题,请参考以下文章

请问我的华为手机为啥不能进行谷歌身份验证(已生成验证码但不能用)?

Java 身份证号码验证

任天堂游戏平台如何绑定二次验证码_两步验证_身份验证?

使用 aws amplify cognito 的自定义身份验证流程

java 验证身份证号

JS验证身份证