ASP.NET窗体身份验证和持久性身份验证Cookie安全

问题描述:

当我们在任何ASP.NET框架(ASP.NET MVC,Web窗体等)中使用ASP.NET窗体身份验证时,我们将身份验证Cookie保存在客户端的浏览器中。作为最佳做法,我们将Cookie设置为HttpOnly并保密。我们还通过SSL进行所有交易。无论我们使用哪种机制对用户进行身份验证(OAuth,ASP.NET会员提供程序等),我们仍然需要持续进行身份验证才能获得更好的用户体验。ASP.NET窗体身份验证和持久性身份验证Cookie安全

随着所有这些,我假设有人仍然可以从客户端浏览器获取cookie并使用这些auth cookie值发出请求。这不能被服务器检测到,我们会将受保护的数据提供给其他人。

一个人想到要降低风险,这里是每当他/她尝试采取一些严肃的行为(例如更改电子邮件地址,访问个人资料信息等)时询问客户的密码,但是这个没有解决任何问题,可能会让客户非常讨厌。

您是否有任何方法可以针对此类问题积极处理?或者什么是在客户端浏览器中坚持认证的最佳方式?

你几乎完全正确地使用。

如果您使用的是成员资格提供程序,那么该cookie将仅标记为HTTP(如您所说),因此无法通过客户端脚本(如恶意的XSS)访问该Cookie。

如果您已将cookie标记为安全,那么我假设您已将表单auth上的“RequireSSL”标志设置为true。通过这样做,cookie不会发送到服务器的任何请求中,这些请求不会通过HTTPS传出,因此,即使您意外地插入了HTTP请求(如果浏览器内容嵌入在浏览器中,它仍然会警告用户一个HTTPS页面),cookies不会被发送。

你可以做的唯一的其他事情 - 这不能提供很多的防御,但它是一个很好的做法 - 也是使用HSTS。我在OWASP Top 10 for .NET developers part 9: Insufficient Transport Layer Protection中讨论了这一点,作为确保请求继续通过安全通道发送的附加手段。

对进入会员供应商进行一些认真的重新设计之后,真的没有什么可以做的了。您可以将会话绑定到IP,并且如果请求发生更改,则不会接受请求,但这可能会导致问题(即IP发生变化,并且不会保护您免受同一地址上的多个人的影响)。您还可以创建浏览器的指纹(即请求标头中发送的所有内容)并确保后续请求匹配,但我们将在此处详细讨论。

最终,安全性应该根据其所保护的资产的价值以及恶意活动的可能性而定制。你不会说什么它是你所保护的,但如果它是一个金融系统,你将会比在博客上使用一个简单的评论引擎更加长久。

总之,看起来你做得很好,只要考虑你在保护的价值背景下实施的措施是否合适。哦 - 如果您使用SQL成员资格提供程序进行凭证存储,请确保您读取Our password hashing has no clothes,然后停止执行此操作!

+0

感谢特洛伊,非常好的回答和很好的建议。我应该承认,我忽视了将'slidingexpiration'设置为'false'。我假设这使得过期票不能重新激活。这也给系统增加了一个信心。你怎么看? – tugberk 2012-08-03 09:36:31

+0

滑动过期在启动时的作用是将会话超时应用于*上次请求*,但当它关闭时,会将其应用于*会话的开始*。假设你有20分钟的超时时间,并积极使用系统10分钟。当滑动到期时间为*时,超时将在30分钟后发生。当它关闭*超时将发生在20分钟。关闭它会减少劫持帐户的机会窗口,但会对可用性产生不利影响。如果你的系统是人们进入的系统,那就快速做他们需要的东西,然后离开,把它关掉。 – 2012-08-03 10:05:46

+0

然后,无论哪种方式,过期的auth cookie都无法使用并重新激活,对吧? – tugberk 2012-08-03 10:13:48

您已经在使用HTTPS并加密了相当安全的cookie。

如果您仍然担心,我会建议在服务器上存储关于用户会话的其他信息(IP地址,用户代理等),并根据会话期间提供的信息验证该信息。

如果用户更改其电子邮件地址,您可以将撤销链接发送至原始电子邮件地址,因此如果此更改未经授权,则会向真正的所有者发送更改通知。

+0

妥协IP地址很难,但用户代理可以很容易地由攻击者提供。我承认这可能会让事情变得更难以破解。另一方面,如果他/她正在移动(经常用他的机器(笔记本电脑,平板电脑等)改变她/他的位置),检查IP地址对于客户来说可能是非常烦人的。但我仍然+1。 – tugberk 2012-08-03 09:26:44

对于您所做的所有事情以及考虑到this question的额外建议,我会额外建议您在服务器上保留更多关于用户的信息以及身份验证Cookie,因此如果某人窃取了Cookie并尝试使用它,也必须符合客户的所有其他特征才能使用它。

我保留并检查的其余一些信息与认证cookie一起。

  1. 会话cookie与认证cookie连接。
  2. 浏览器ID与与
  3. 的Javascript连接用户的
  4. 叶连接必须使

我知道,有人可以说,一切可以被黑客克隆 - 如果黑客可以拿饼干为什么不能和其他人一样。那么没有什么是100%保证的情况下,如果有人可以采取所有的信息实际上可以有,密码它的自我和登录 - 至少你让它更安全一点。