代码之家  ›  专栏  ›  技术社区  ›  Bill Martin

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

  •  3
  • Bill Martin  · 技术社区  · 17 年前

    我已经使用c#&创建了一个web身份验证应用程序;希望从您认为的安全性中反弹。所有导航都是通过https完成的。

    用户注册

    1. 如果设置了#1的会话变量,则继续并询问用户名、pwd、安全问题和;A等。在实际保存事件之前,使用Linq保存数据并验证会话变量。PWD和安全答案使用salt和sha进行散列。(使用验证控件和文本框限制来限制输入)

    1. 与注册中的#1相同,但包括用户名。如果确定,则设置步骤1会话变量。
    2. 如果设置了步骤1会话变量,则最多询问3次安全问题。Salt/hash并验证到数据库Salt/hash。如果匹配,则设置步骤2会话变量。(使用验证控件和文本框限制限制输入)
    3. 检查步骤2会话变量。请求新的pwd。使用LINQ散列/添加盐并保存。

    登录

    1. 所有页面都继承自母版页。母版页具有验证用户对象是否设置为有效实例的代码。若不是有效的用户对象,将调用注销,从而重定向到主登录页。

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

    想一想好吗?

    3 回复  |  直到 17 年前
        1
  •  6
  •   erlando    17 年前

    ASP.NET表单身份验证或使用成员资格提供程序的哪一方面不符合您的需要?我发现两者在许多不同的场景中都非常灵活?

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

    如果您没有在框架中使用现成的身份验证工具,那么您应该在其他地方(例如在HttpModule中)使用此类工具。

    IIdentity IPrincipal 您可以附加到 Context.User 在ASP.NET中。

    Developing More-Secure Microsoft® ASP.NET 2.0 Applications 通过 Dominick Baier

    Professional ASP.NET 2.0 Security, Membership, and Role Management 斯蒂芬·沙科夫

    您会惊讶地发现.NET中内置的安全基础设施是多么灵活。除了添加一个 <authentication mode="Forms"> <asp:login runat="server"/> 页上的控件。

        2
  •  6
  •   Joel Coehoorn    17 年前

    “滚动你自己的”的问题是,很容易以微妙的方式出错,因此

    一年后,你的网站在六个月前就被黑客入侵了,直到那时你才知道。

    找到一种依赖安全专家编写的实现的方法要好得多。

        3
  •  2
  •   Jack Lawson    17 年前

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

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

    [编辑]

    可能 要更加安全(尽管,你永远不应该盲目地相信任何东西,尤其是那些你不知道魔法黑匣子后面发生了什么的东西),但有时候,当它不够灵活时,你只能自己滚动。