asp.net中的基本表单身份验证有多安全?

时间:2008-09-25 12:46:39

标签: asp.net forms-authentication

想象一下,你有一个只有2个页面的简单网站:login.aspx和secret.aspx。除了ASP.net表单身份验证和login.aspx上的ASP.net登录服务器控件之外,您的站点都是安全的。详情如下:

  • 该站点配置为使用SqlMembershipProvider
  • 该网站拒绝所有匿名用户
  • Cookie已停用

对于安全性来说,显然需要考虑很多事情,但我对.net框架附带的零代码开箱体验更感兴趣。

如果为了这个问题,唯一的攻击点是login.aspx中的用户名/密码文本框,黑客是否可以注入允许他们访问我们的secret.aspx页面的代码?

Microsoft提供的零代码开箱即用体验有多安全?

8 个答案:

答案 0 :(得分:14)

您仍然有一些未考虑的变量:

  • 安全性进入您的成员资格提供程序使用的数据存储区(在本例中为Sql Server数据库)。
  • 同一IIS中托管的其他网站的安全性
  • 托管网站所涉及的计算机的一般网络安全性,或托管网站的同一网络
  • 托管网站的计算机的物理安全性
  • 您是否使用适当的措施来加密身份验证流量? (HTTPS / SSL)

并非所有这些问题都是MS特定的,但它们值得一提,因为如果不加以处理,它们中的任何一个都很容易超过您所询问的问题。但是,出于你的问题的目的,我会假设它们没有任何问题。

在这种情况下,我很确定表单身份验证可以执行它应该执行的操作。我不认为那里有任何当前活跃的漏洞利用。

答案 1 :(得分:4)

据我所知,密码将以纯文本形式发送(但已编码)。因此,最重要的是在登录屏幕上使用HTTPS协议。

其他设置对我来说似乎是安全的。

答案 2 :(得分:3)

使用HTTP基本身份验证(.NET基本表单身份验证正在使用),为了查看secret.aspx页面,浏览器必须发送用户名和密码的Base64编码串联。

除非您使用SSL,否则任何有权在服务器和浏览器之间扫描网络的人都可以阅读此信息。他们可以解码用户名和密码。他们将来可以重播用户名和密码以访问secret.aspx页面。

也就是说,除非您使用SSL,否则有人也可以使用secret.aspx扫描其他人的整个会话,因此实际上他们也可以访问该页面的内容。

答案 3 :(得分:2)

好吧,试着看看幕后:

  

密码保护

     

存储用户名的应用程序,   密码和其他身份验证   数据库中的信息永远不应该   以明文存储密码,以免   数据库被盗或被盗。至   那个结束,SqlMembershipProvider   支持三种存储格式   密码和密码(“编码”)   密码答案。提供者的   PasswordFormat属性,即   从passwordFormat初始化   配置属性,确定   使用哪种格式:

     
      
  • MembershipPasswordFormat.Clear,用于存储密码和密码   明文答案。
  •   
  • MembershipPasswordFormat.Hashed(默认值),用于存储盐渍   从密码生成的哈希值   密码答案。盐是随机的   .NET生成的128位值   框架的RNGCryptoServiceProvider   类。每个密码/密码答案   用这个独特的价值来腌制对,   并将盐储存在   aspnet_Membership表的PasswordSalt   领域。哈希的结果   密码和盐存储在   密码字段。同样,结果   哈希密码答案和   salt存储在PasswordAnswer中   字段。
  •   
  • MembershipPasswordFormat.Encrypted,   它存储加密的密码和   密码答案。   SqlMembershipProvider加密   使用密码和密码答案   对称加密/解密   键中指定的键   配置部分的decryptionKey   属性和加密   算法中指定的算法    配置部分   解密属性。   SqlMembershipProvider抛出一个   如果要求加密,则为例外   密码和密码答案,如果   decryptionKey设置为Autogenerate。   这可以防止成员数据库   包含加密密码和   密码答案变得无效   如果移动到另一台服务器或另一台   应用
  •   

因此,您的安全性(开箱即用)将取决于您使用的密码保护格式策略:

  • 如果您使用明文,则很容易入侵您的系统。
  • 另一方面,使用Encrypted,安全性取决于对计算机的物理访问(或至少是machine.config)。
  • 使用哈希密码(默认值)将保证安全性,具体取决于:a)已知的RNGCryptoServiceProvider类散列策略的反转和b)访问数据库以危害随机生成的盐。

我不知道是否可以在默认的Hash-base系统中使用某种彩虹表黑客。

有关详细信息,请查看此链接: http://msdn.microsoft.com/en-us/library/aa478949.aspx

答案 4 :(得分:1)

如果通过成员资格提供程序正确配置,您将获得足够的安全级别。除此之外,可以通过规范攻击访问该页面,但这与您的一般安全性有关。我介绍了如何使用Security Enterprise Application Blocks。您可能希望阅读这些内容并在实现站点安全性时进行调查,并了解常见的安全威胁。鉴于您处于开放式共享网络中,并且完全安全将是由军方全天候安全保护的安全防护服务器(基于Orange书籍的国防部“A”级安全性),任何站点都不会100%不可攻击)。但是,成员资格提供程序的开箱即用功能(如果配置正确)将提供大量安全性。

编辑:是的,我同意其他评论,如果你想保护来自数据包嗅探器和网络监视器的用户名/密码,至少登录屏幕上的HTTPS是给定的。

答案 5 :(得分:0)

Asp.Net支持无Cookie会话,this blog post shows。它使用URL中的标识符来跟踪用户,而不是会话cookie。

我不确定这是多么安全,但我认为这对于强制身份字符串的难度是安全的。

看起来它或多或少开箱即用,但是当重定向用户并希望维护会话状态时,您必须包含会话ID。博客文章展示了如何做到这一点,以及网上的许多其他文章。

答案 6 :(得分:0)

答案 7 :(得分:0)

网址上的Cookie不够安全,它存在很多不同的问题(特别是如果你有任何问题,可能会引用漏洞)以及使用HTTPS。