试想一下,你有一个简单的网站只有2页:login.aspx的和secret.aspx。 网站使用的是什么,但ASP.net表单验证和login.aspx的一个ASP.net登录服务器控件保护。 详情如下所示:
- 该网站被配置为使用SqlMembershipProvider的
- 该网站拒绝所有匿名用户
- Cookies是禁用
该显然很多事情要考虑有关安全,但我更感兴趣的是零代码出随.NET框架箱的经验。
如果对于这个问题的缘故,唯一的攻击点是在login.aspx的用户名/密码文本框,可以在黑客注入代码,使他们能够访问我们的网页secret.aspx?
如何安全是零码外的全新体验,微软提供?
你仍然有一些变量没有被占:
- 安全性成您的会员提供商使用的数据存储(在这种情况下,SQL Server数据库)。
- 其他网站的安全性在同一个IIS托管
- 参与主办该网站的机器一般的网络安全性,或在同一网络上,其中网站托管
- 主办该网站的机器的物理安全
- 您是否使用适当的措施来加密认证的流量? (HTTPS / SSL)
并非所有的这些问题都是具体的MS,但他们值得一提的,因为任何人可以很容易地超过你问一下,如果不照顾的问题。 但是,对于你的问题的目的,我假设有没有跟他们任何问题。
在这种情况下,我敢肯定窗体身份验证做什么它应该做的。 我不认为有任何当前活跃的开发在那里。
据我所知的密码将作为纯文本(编码)。 所以,我们要做的最重要的事情是在登录屏幕使用HTTPS协议。
另设置似乎是安全的我。
随着HTTP基本身份验证,这是什么.NET基本窗体身份验证使用,以查看secret.aspx页面,浏览器必须将用户名和密码的Base64编码的串联。
除非你使用SSL,谁有权访问扫描服务器和浏览器可以读取这些信息之间的网络。 他们可以解码的用户名和密码。 他们可以在未来重播的用户名和密码才能访问到secret.aspx页面。
这就是说,除非你使用SSL,有人还可以扫描他人使用secret.aspx的整个会话,因此,实际上,他们将有机会获得该页面的内容,以及。
那么,尝试一下幕后:
密码保护
用户名,密码和其他认证信息存储在数据库中的应用程序不应该存储在明文口令,以免数据库被盗或受到威胁。 为此,SqlMembershipProvider的支持密码和密码提示问题答案三种存储格式(“编码”)。 提供者的了passwordFormat属性,该属性被从了passwordFormat配置属性初始化,确定哪个格式用于:
- MembershipPasswordFormat.Clear,存储密码和密码提示问题答案的明文。
- MembershipPasswordFormat.Hashed(缺省值),其存储从密码和密码答案生成盐腌哈希。 该盐是由.NET Framework的RNGCryptoServiceProvider类生成随机的128位的值。 每个密码/密码答案对被腌制用这种独特的价值,并且使盐储存在aspnet_Membership表的PasswordSalt场。 哈希密码和盐的结果存储在密码字段。 类似地,散列密码答案和盐的结果被存储在PasswordAnswer字段。
- MembershipPasswordFormat.Encrypted,它存储加密的密码和密码提示问题答案。 SqlMembershipProvider的密码进行加密,并使用在配置部的decryptionKey属性指定的对称加密/解密密钥,并在配置部的解密属性中指定的加密算法密码的答案。 SqlMembershipProvider的抛出一个异常,如果它被要求对密码进行加密和密码提示问题答案,如果decryptionKey设置为自动生成。 这可以防止包含加密的密码和密码提示问题答案变成无效的,如果移动到另一台服务器或其他应用程序会员数据库。
所以,你的安全强度(开箱)将取决于你所使用的密码保护格式策略:
- 如果使用纯文本,这显然是更容易侵入你的系统。
- 而另一方面使用加密,安全将取决于您的机器(或至少,machine.config中)的物理访问。
- 一)RNGCryptoServiceProvider类的散列策略称为逆转和b)访问数据库妥协随机生成的盐:使用哈希密码(默认值)会有所保证安全。
我不知道是否有可能使用某种彩虹表攻入默认哈希库系统。
有关详细信息,请查看此链接: http://msdn.microsoft.com/en-us/library/aa478949.aspx
如果通过成员资格提供配置正确,你将有安全的适当水平。 以外的是,访问该页面可能是通过cannonical攻击访问,但与你的总体安全的事情。 我介绍了使用演示安全的企业应用程序块 。 你可能想对那些阅读并在网站上实施安全时考虑这一点,只是知道常见的安全威胁。 没有网站将永远是100%牢不可破的,因为你是一个开放的共享网络上,总安全将被锁定在一个安全的服务器拔掉由军队把守24/7(约国防部“A”级别的安全性,基于黄皮书的)。 但出的会员供给者(当正确配置)的现成功能将提供安全良好的金额。
编辑:是的,我同意这是提出的其他意见,HTTPS至少在日志中屏幕是给定的,如果你要保护的用户名/密码的数据包嗅探器和网络监视器。
Asp.Net支持Cookie会话,因为这个博客帖子显示 。 取而代之的是会话cookie的,它使用的标识符在URL中跟踪用户。
我不知道如何安全的,这是,但我认为这是一个安全的,因为蛮力的标识字符串的难度。
它看起来像它重定向用户和想要保持会话状态必须包含会话ID然而,当工作或多或少开箱。 博客文章显示了如何做到这一点,以及在网络上的许多其他文章。
以下是微软关于这个问题的两个很好的文章:
如何:保护窗体身份验证在ASP.NET 2.0
INFO:使用安全套接字层帮助保护窗体身份验证(SSL)
在网址饼干是不是足够安全的,有这么多不同的问题,它(特别是引荐泄漏如果你有任何)和HTTPS的使用。