20

假设您有一个只有 2 个页面的简单站点:login.aspx 和 secret.aspx。您的站点只使用 ASP.net 表单身份验证和 login.aspx 上的 ASP.net 登录服务器控件来保护您的站点。详细情况如下:

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

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

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

Microsoft 提供的零代码开箱即用体验的安全性如何?

4

8 回答 8

14

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

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

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

在这种情况下,我很确定表单身份验证会完成它应该做的事情。我认为目前没有任何活跃的漏洞利用。

于 2008-09-25T12:53:43.680 回答
4

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

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

于 2008-09-25T12:51:36.697 回答
3

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

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

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

于 2008-09-25T12:57:18.367 回答
2

好吧,试着看看幕后:

密码保护

在数据库中存储用户名、密码和其他身份验证信息的应用程序绝不应以明文形式存储密码,以免数据库被盗或被破坏。为此,SqlMembershipProvider 支持密码和密码答案的三种存储格式(“编码”)。提供者的 PasswordFormat 属性(从 passwordFormat 配置属性初始化)确定使用哪种格式:

  • MembershipPasswordFormat.Clear,以明文形式存储密码和密码答案。
  • MembershipPasswordFormat.Hashed(默认值),它存储从密码和密码答案生成的加盐哈希。salt 是由 .NET Framework 的 RNGCryptoServiceProvider 类生成的随机 128 位值。每个密码/密码答案对都使用这个唯一值加盐,加盐存储在 aspnet_Membership 表的 PasswordSalt 字段中。密码和盐的散列结果存储在密码字段中。同样,密码答案和盐的散列结果存储在 PasswordAnswer 字段中。
  • MembershipPasswordFormat.Encrypted,存储加密的密码和密码答案。SqlMembershipProvider 使用配置部分的decryptionKey 属性中指定的对称加密/解密密钥和配置部分的decryption 属性中指定的加密算法对密码和密码答案进行加密。如果要求 SqlMembershipProvider 对密码和密码答案进行加密,并且如果将 decryptionKey 设置为 Autogenerate,则会引发异常。这可以防止包含加密密码和密码答案的成员数据库在移动到另一个服务器或另一个应用程序时变得无效。

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

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

我不知道是否可以使用某种彩虹表破解默认的基于哈希的系统。

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

于 2008-09-25T13:08:27.263 回答
1

如果通过会员提供商正确配置,您将拥有足够的安全级别。除此之外,可以通过规范攻击访问该页面,但这与您的一般安全性有关。我做了一个关于使用安全企业应用程序块的演示。您可能想阅读这些内容并在您的站点上实施安全性时对其进行调查,并注意常见的安全威胁。鉴于您在一个开放的共享网络上,并且总安全性将是一个不插电的服务器,该服务器被锁定在一个由军方 24/7 全天候保护的保险箱中,任何网站都不会是 100% 不可破解的(根据橙皮书,围绕国防部“A”级安全性) )。但是成员资格提供程序的开箱即用功能(如果配置正确)将提供大量的安全性。

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

于 2008-09-25T12:52:26.850 回答
0

Asp.Net 支持无 cookie 会话,正如这篇博文所示。它使用 url 中的标识符来跟踪用户,而不是会话 cookie。

我不确定这有多安全,但我认为这是安全的,因为难以暴力破解身份字符串。

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

于 2008-09-25T12:54:19.357 回答
0

以下是微软关于这个主题的两篇好文章:

如何:保护 ASP.NET 2.0 中的表单身份验证

信息:使用安全套接字层 (SSL) 帮助保护表单身份验证

于 2009-03-05T17:54:31.847 回答
0

URL 上的 Cookie 不够安全,它存在很多不同的问题(尤其是引荐来源泄漏,如果有的话)和 HTTPS 的使用。

于 2009-03-05T18:14:16.900 回答