ASP.NET中基本表单身份验证有多安全?

20

假设你有一个只有两个页面的简单网站:login.aspx和secret.aspx。 你的网站是用ASP.net表单身份验证和login.aspx上的ASP.net登录服务器控件进行保护的。 具体内容如下:

  • 该站点配置为使用SqlMembershipProvider。
  • 该站点拒绝所有匿名用户。
  • 禁用了Cookies。

显然,关于安全性有许多要考虑的因素,但我更关心的是与 .net 框架提供的零代码开箱即用体验相关的问题。

如果仅以此问题为例,攻击点仅限于login.aspx中的用户名/密码文本框,那么黑客能否注入代码以获得访问我们secret.aspx页面的权限?

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

8个回答

15

你还有一些未考虑到的变量:

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

并非所有这些问题都是特定于微软公司的,但值得提及的是,如果不处理任何一个问题,它们中的任何一个都可能轻易地压倒你所问的问题。但是,出于你的问题目的,我假设它们没有任何问题。

在这种情况下,我相信表单身份验证确实完成了其应该完成的任务。我认为目前没有任何活跃的漏洞利用。


同样,您必须采取全面的安全方法并实践“深度安全”。在那个盔甲中的任何一个缺口(例如中间人攻击...)都可能导致严重的数据损失。 - NotMe

4
据我所知,密码将以明文形式发送(但已编码)。因此,在登录屏幕上使用HTTPS协议是最重要的事情。
对于我来说,其他设置似乎是安全的。

3
使用HTTP基本身份验证,这是.NET基本表单身份验证使用的方式,为了查看secret.aspx页面,浏览器必须发送用户名和密码的Base64编码连接。除非您使用SSL,否则可以访问在服务器和浏览器之间扫描网络的任何人都可以读取此信息。他们可以解码用户名和密码。他们还可以在未来重播用户名和密码以访问secret.aspx页面。
也就是说,除非您使用SSL,否则某人还可以扫描其他人使用secret.aspx的整个会话,因此实际上他们也将访问页面的内容。

如果您正在使用哈希密码策略,则仍需要相应的密码盐,因此我认为用户名+密码拼接本身无法完成请求。 - Jon Limjap

2
好的,请看幕后情况:
密码保护
将用户名称、密码和其他身份验证信息存储在数据库中的应用程序不应以明文形式存储密码,以免数据库被盗或受到破坏。为此,SqlMembershipProvider支持三种密码和密码答案的存储格式(“编码”)。提供程序的PasswordFormat属性从passwordFormat配置属性初始化,确定使用哪种格式:
- MembershipPasswordFormat.Clear,它以明文形式存储密码和密码答案。 - MembershipPasswordFormat.Hashed(默认),它存储从密码和密码答案生成的带盐哈希值。盐是由.NET Framework的RNGCryptoServiceProvider类生成的随机128位值。每个密码/密码答案对都使用此唯一值进行加盐,并将盐存储在aspnet_Membership表的PasswordSalt字段中。哈希密码和盐的结果存储在Password字段中。类似地,哈希密码答案和盐的结果存储在PasswordAnswer字段中。 - MembershipPasswordFormat.Encrypted,它存储加密的密码和密码答案。SqlMembershipProvider使用配置部分的decryptionKey属性指定的对称加密/解密密钥和配置部分的decryption属性指定的加密算法来加密密码和密码答案。如果要求加密密码和密码答案,并且decryptionKey设置为Autogenerate,则SqlMembershipProvider会引发异常。这可以防止包含加密密码和密码答案的成员资格数据库在移动到另一个服务器或另一个应用程序时变得无效。
因此,您的安全性强度(开箱即用)将取决于您使用的密码保护格式策略:
- 如果使用明文,则显然更容易入侵您的系统。 - 另一方面,如果使用加密,则安全性取决于访问您的计算机(或至少是machine.config)。 - 使用哈希密码(默认值)将保证安全性,具体取决于:a)RNGCryptoServiceProvider类的散列策略已知的反向和b)访问数据库以破坏随机生成的盐。
我不知道是否可能使用某种彩虹表黑客攻击默认的基于哈希的系统。
有关详细信息,请查看此链接:http://msdn.microsoft.com/en-us/library/aa478949.aspx

1
如果通过成员提供程序正确配置,您将拥有足够的安全级别。除此之外,访问该页面可能会受到规范攻击的影响,但这与您的一般安全有关。我曾就使用Security Enterprise Application Blocks做过演示,您可以在实施站点安全性时研究一下,并了解常见的安全威胁。鉴于您是在开放共享网络上,没有任何站点能够百分之百地防止被黑客攻击,完全安全的站点需要一个断电的服务器并且由军方24小时守卫(基于橙皮书DoD“A”级安全性)。但成员提供程序的开箱即用功能(正确配置)将提供相当数量的安全保障。
编辑:是的,我同意其他评论中提到的,至少在登录屏幕上启用HTTPS是必须的,如果您想要保护用户名/密码免受数据包捕获和网络监视器的攻击。

现在,由于Firesheep cookie劫持的存在,我们在身份验证后所有通信都使用HTTPS。 - Timothy Lee Russell

0

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

我不确定这有多安全,但我认为它的安全性与破解身份字符串的难度相当。

看起来它基本上可以直接使用,但是当重定向用户并希望保持会话状态时,您必须包含会话ID。博客文章展示了如何做到这一点,以及网络上的许多其他文章。


0

0

通过URL传递Cookie不够安全,存在许多不同的问题(尤其是如果您有任何引荐者泄漏和使用HTTPS)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接