想象一下,你有一个只有2个页面的简单网站:login.aspx和secret.aspx。除了ASP.net表单身份验证和login.aspx上的ASP.net登录服务器控件之外,您的站点都是安全的。详情如下:
对于安全性来说,显然需要考虑很多事情,但我对.net框架附带的零代码开箱体验更感兴趣。
如果为了这个问题,唯一的攻击点是login.aspx中的用户名/密码文本框,黑客是否可以注入允许他们访问我们的secret.aspx页面的代码?
Microsoft提供的零代码开箱即用体验有多安全?
答案 0 :(得分:14)
您仍然有一些未考虑的变量:
并非所有这些问题都是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。 这可以防止成员数据库 包含加密密码和 密码答案变得无效 如果移动到另一台服务器或另一台 应用
因此,您的安全性(开箱即用)将取决于您使用的密码保护格式策略:
我不知道是否可以在默认的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)
以下是微软关于此主题的两篇好文章:
How To: Protect Forms Authentication in ASP.NET 2.0
INFO: Help Secure Forms Authentication by Using Secure Sockets Layer (SSL)
答案 7 :(得分:0)
网址上的Cookie不够安全,它存在很多不同的问题(特别是如果你有任何问题,可能会引用漏洞)以及使用HTTPS。