首页 > 解决方案 > 简单登录系统的时序图

问题描述

我有一个部分完成的序列图,但它需要更多细节。从数据库中检索到用户后,系统如何决定是接受还是拒绝登录。我的意思是如何在我的序列图中实现它:

在此处输入图像描述

标签: javaumlsequencediagram

解决方案


您的图表表示的登录类型是基于表单的身份验证。将其分解为步骤(无图表):

  1. 用户通过 https 连接输入凭据(用户名、密码)。
  2. 如果两个凭据都已输入,例如用户名的有效电子邮件地址和密码(任何内容),则:

    一个。在服务器上,使用您正在使用的任何算法对步骤 (1) 中的密码进行哈希处理(参见此处;不要再使用 md5,它不再是一个好的候选者有几个原因,例如哈希冲突和速度问题)。也见这里

    湾。在服务器上,获取与您要验证的用户对应的行。

    如果该行存在:

    • 将您在 (2a) 中获得的哈希值与数据库中的哈希值进行比较。

      • 如果匹配,则处理登录成功;您很可能希望Principal在会话中放置一个对象来识别登录用户。如果您正在跟踪不成功的登录帐户,请将这个数字归零(登录成功)。

      • 如果不匹配(指定用户的密码不正确)

        • 使用通用消息返回失败(不要向潜在攻击者提供不必要的更多信息)。
        • 在这里,如果您还跟踪失败的登录尝试,请增加数字,如果超过允许的最大连续失败次数,则阻止该帐户。
        • 可选:向注册用户发送一封电子邮件,通知他们登录尝试失败。

    别的

    • 该行不存在;不存在具有该用户名的用户。使用通用消息返回失败。
  3. 其他(来自 2--否定:两个凭据均未输入)

    一个。返回一般验证错误(输入用户名和密码)。不要向服务器发送任何内容。

注意:如果您使用 Java 执行此操作,请不要使用 aString来存储密码对象,因为它是不可变的。将其存储在一个char[]数组中,一旦不再需要密码,您就可以将其清除。


推荐阅读