【发布时间】:2010-10-04 07:47:53
【问题描述】:
我已经使用 c# 和 asp.net 创建了一个 Web 身份验证应用程序,并且想证明您认为它的安全性。所有导航都是通过https完成的。
用户注册
- 用户输入 3 个数据点(SSN、Lname 和 DOB)。如果在我们的系统中找到该组合,则会设置会话变量并导航到下一页。
- 如果设置了#1 的会话变量,继续并询问用户名、密码、安全问答等。使用 Linq 保存数据并在实际保存事件之前验证会话变量。 PWD 和安全答案使用 salt 和 sha 进行哈希处理。 (使用验证控件和文本框限制来限制输入)
重设密码
- 与注册中的#1 相同,但包括用户名。如果没问题,设置第 1 步会话变量。
- 如果设置了第 1 步会话变量,则最多询问 3 次安全问题。加盐/散列并验证数据库加盐/散列。如果匹配,则设置第 2 步会话变量。(使用验证控件和文本框限制来限制输入)
- 检查步骤 2 会话变量。求新密码。使用 LINQ 哈希/加盐并保存。
登录(使用验证控件和文本框限制来限制输入)
- 收集用户名和密码。与用户名匹配的哈希/盐密码,并查看密码是否与哈希匹配。如果没问题,实例化用户对象并传递到默认页面。
- 所有页面都继承自母版页。 Masterpage 具有验证用户对象是否设置为有效实例的代码。如果不是有效的用户对象,则会调用注销,重定向到主登录页面。
有点罗嗦,但想清楚。
我在这里遗漏了什么吗?我想使用 MS 的表单身份验证,但决定推出自己的身份验证,因为我在使用 FBA 完成一些我想要完成的自定义内容时遇到了一些问题。通过使用会话变量作为步骤完成标记,这是否足以防止会话窃取或书签?有没有更好的方法来做到这一点?
有什么想法吗?
【问题讨论】:
-
请告诉我您的数据库中没有以明文形式存储 SSN。