繁体   English   中英

asp.net中的表单身份验证Cookie值漏洞

[英]Forms Authentication Cookie value vulnerability in asp.net

在asp.net中,我可以像往常一样使用表单身份验证登录,复制我们的auth cookie值,注销,使用Chrome的“编辑此Cookie”插件将cookie人工添加到客户端,刷新(匿名)登录页面嘿presto我再次登录 这似乎是一个漏洞 - 有没有办法使用标准表单auth修复它,或者我必须做一些事情,比如使用自定义Authorize属性覆盖asp.net mvc中的现有属性?

我不认为这本身就是一个漏洞。 在表单身份验证期间发生以下情

  1. 您为服务器提供用户名/密码
  2. 服务器验证用户名/密码
  3. 如果有效,则服务器随后将加密的身份验证票证(cookie)发送到客户端,其中包含到期时间(在web.config表单身份验证部分中设置)和用户名(全部加密)
  4. 在每个需要授权的请求中,cookie在服务器上解密,检查到期时间并使用用户名来查看是否授权(或获取所请求资源的角色)。
  5. 当您注销时,cookie的过期时间是在过去设置的,因此,它不再是有效的cookie

现在,至于为什么你看到你所看到的......你在注销前复制cookie。 因此,您复制的cookie永远不会注册注销(移动的到期时间)。 重新连接时,您仍然拥有有效的身份验证cookie。 现在,如果您的表单身份验证超时设置为...让我们说20分钟...如果您复制cookie并等待21分钟,那么此方法将失败,它已经过期。

Cookies总是很有魅力,我们对此无能为力。 我们能做的是阻止有人偷走cookie。

关于ASP.NET MVC,它可以很好地避免窃取cookie。 默认情况下,它作为安全性的一部分主要做法是:

  1. 对呈现给视图的字符串进行编码(如果您使用的是Razor,则不了解其他字符串)以防止XSS攻击。

  2. 请求验证(停止有潜在危险的数据到达应用程序)。

  3. 阻止JSON数据的GET访问。

  4. 使用防伪助手预防CSRF

关于cookie,Microsoft提供了HttpOnly功能,这有助于隐藏javascript中的cookie。 您正在谈论的表单身份验证是一个HttpOnly cookie意味着有人不能通过JavaScript窃取它,它更安全。

你可以用任何 cookie来做到这一点。 您可以检查/复制来自任何给定域的所有cookie,并根据需要进行欺骗。 您可以(仅) 自己这样做,因为它是您的PC(或用户登录到PC)。 显然,如果你在共享PC上,这是一个问题(在你的所有信息中)。

“复制你的cookie”的行为实际上是恶意软件企图窃取/劫持你的身份(或某些网站上的当前会话)的一种方式。 也就是说,除非你有一些恶意软件,否则你不能只是“复制别人的cookie”。

假设logout已完成,您可以要求用户关闭其浏览器,以便从(文件)系统中删除过期的cookie。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM