java - 简单登录系统的时序图
解决方案
您的图表表示的登录类型是基于表单的身份验证。将其分解为步骤(无图表):
- 用户通过 https 连接输入凭据(用户名、密码)。
如果两个凭据都已输入,例如用户名的有效电子邮件地址和密码(任何内容),则:
一个。在服务器上,使用您正在使用的任何算法对步骤 (1) 中的密码进行哈希处理(参见此处;不要再使用 md5,它不再是一个好的候选者有几个原因,例如哈希冲突和速度问题)。也见这里。
湾。在服务器上,获取与您要验证的用户对应的行。
如果该行存在:
将您在 (2a) 中获得的哈希值与数据库中的哈希值进行比较。
如果匹配,则处理登录成功;您很可能希望
Principal
在会话中放置一个对象来识别登录用户。如果您正在跟踪不成功的登录帐户,请将这个数字归零(登录成功)。如果不匹配(指定用户的密码不正确)
- 使用通用消息返回失败(不要向潜在攻击者提供不必要的更多信息)。
- 在这里,如果您还跟踪失败的登录尝试,请增加数字,如果超过允许的最大连续失败次数,则阻止该帐户。
- 可选:向注册用户发送一封电子邮件,通知他们登录尝试失败。
别的
- 该行不存在;不存在具有该用户名的用户。使用通用消息返回失败。
其他(来自 2--否定:两个凭据均未输入)
一个。返回一般验证错误(输入用户名和密码)。不要向服务器发送任何内容。
注意:如果您使用 Java 执行此操作,请不要使用 aString
来存储密码对象,因为它是不可变的。将其存储在一个char[]
数组中,一旦不再需要密码,您就可以将其清除。
推荐阅读
- javascript - 根据条件分配 ngStyle
- java - 无法在某些设备上隐藏状态栏
- python - 在python中读取带有json对象流的文件
- http - 如何在我的 BlueHost 服务器上运行 HTTP Go 程序
- python - 从字符串表示中获取类
- neo4j - Neo4j如何获取两个节点之间的公共节点
- apache-kafka - 将 GraphiteReporter 添加到 Kafka Connect 集群
- python-3.x - 参数可以传递给分配给变量的函数吗?
- python - 使用 matplotlib 绘制热图
- javascript - 子组件道具不反映父组件的状态变化