这个ASP.Net身份验证模型的安全性如何?

时间:2009-01-29 19:03:01

标签: c# asp.net security

我使用c#& amp;创建了一个网络身份验证应用asp.net并想要反弹你认为它的安全性。所有导航均由https完成。

用户注册

  1. 用户输入3个数据点(SSN,Lname和DOB)。如果在我们的系统中找到该组合,则设置会话变量并导航到下一页。
  2. 如果设置了#1的会话变量,请继续并询问用户名,密码,安全q& A等。使用Linq保存数据并在实际保存事件之前验证会话变量。使用salt和sha对PWD和安全性答案进行哈希处理。 (使用验证控件和文本框限制来限制输入)
  3. 重设密码

    1. 与注册中的#1相同,但包含用户名。如果确定,请设置第1步会话变量。
    2. 如果设置了第1步会话变量,请提出最高3倍的安全问题。 Salt / hash并验证数据库salt / hash。如果匹配,则设置步骤2会话变量。(使用验证控件和文本框限制来限制输入)
    3. 检查第2步会话变量。请求新的密码。哈希/盐并使用LINQ保存。
    4. 登录(使用验证控件和文本框限制来限制输入)

      1. 收集用户名和密码。与用户名匹配的HASH / salt密码,查看密码是否与hash匹配。如果没问题,请设置用户对象并传递到默认页面。
      2. 所有页面都从母版页继承。 Masterpage具有验证用户对象是否设置为有效实例的代码。如果没有有效的用户对象,则调用注销,重定向到主登录页面。
      3. 有点罗嗦,但想要清楚。

        我在这里遗漏了什么?我想使用MS的表单auth,但决定自己滚动,因为我有一些问题,我想用FBA完成一些自定义的东西。通过使用会话变量作为步骤完成标记,这是否足以防止会话窃取或书签?有更好的方法吗?

        请问?

3 个答案:

答案 0 :(得分:6)

ASP.NET Forms身份验证或使用Membership Provider位的哪些方面不符合您的需求?我发现在很多不同的场景中都非常灵活?

滚动自己通常会在未来使生活变得艰难,特别是当您需要开始进行更改时。您还可以使用母版页来验证用户登录状态等,但是当您需要更多母版页时,您需要在每个母版页中复制相同的代码块并使其保持一致。这可能会成为未来某个地方的维护噩梦。

如果您没有在框架中使用现成的烘焙认证工具,那么您应该在其他地方管理这种事情,例如在HttpModule中。

我认为你应该重温你正在做的事情。如果需要从用户对象挂起用户特定数据/对象,请查看实现自己的自定义IIdentity对象。然后分配给自定义IPrincipal,您可以将其附加到ASP.NET中的Context.User

@ asp316和@Jack(评论)我建议抓住这两本书:

Developing More-Secure Microsoft® ASP.NET 2.0 Applications

Dominick Baier Stefan Schackow的

Professional ASP.NET 2.0 Security, Membership, and Role Management

您会惊讶于.NET内置的安全基础架构的灵活性。除了在web.config中添加<authentication mode="Forms">设置并在页面上打一个<asp:login runat="server"/>控件之外,还有很多其他功能。

答案 1 :(得分:6)

关于“滚动你自己”的事情是,很容易以微妙的方式弄错它,使出现工作。然后,当然,您可以部署此代码并继续处理其他事情,而不知道出现任何问题。毕竟,它通过了所有测试。

一年之后,事实证明你的网站在六个月前被黑了,直到那时你才知道它。

更好地找到依赖安全专家编写的实现的方法。

答案 2 :(得分:2)

我觉得你很好;在一定程度的错误登录尝试(5次不良尝试后1小时?)之后我还会锁定用户一段时间并检查请求之间的时间(根据我的经验,AjaxControlToolkit“nobot”在这里工作奇迹)。 p>

一个选项,而不是使用您的主页面作为安全代码,是实现页面(或主页面)可以继承的接口;这样,如果您扩展到多个母版页,或者如果您有母版之外的页面,则可以继续使用相同的安全检查代码。

根据您的要求,我会回避(必需的)安全问题;我总是忘记我的。您已经在检查SSN,BDay,姓氏,用户名和密码;任何知道这一切的人都可以猜到你母亲的娘家姓名。

[编辑]

另外,我认为只要你像疯了一样审查它就可以自己滚动。扔掉其他人,看看它是如何保持的。我完全理解ASP.NET控件选项的不灵活性;他们的控件可能更安全(尽管,你永远不应该盲目相信任何东西,特别是那些你不知道魔法黑盒后面发生了什么的东西),但有时候你只需滚动你的当它不够灵活时拥有。