有些黑客可以从用户那里窃取cookie并在网站上使用该名称登录吗?

时间:2010-03-23 09:09:55

标签: asp.net security cookies forms-authentication

阅读这个问题

different users get the same cookie value in aspxanonymous

并搜索解决方案,我开始思考,如果有人可以通过某种方式真正窃取cookie,然后将其放在他的浏览器上并以管理员身份登录

您是否知道表单身份验证如何确保即使cookie被存储,黑客也不会使用它进行实际登录?

或者你知道其他任何自动防御机制吗?

先谢谢你。

6 个答案:

答案 0 :(得分:25)

  

是否可以偷取饼干和   以管理员身份验证?

是的,如果Forms Auth cookie没有加密,有人可以破解他们的cookie来提升他们的特权,或者如果不需要SSL,可以复制别人的cookie。但是,您可以采取一些措施来降低这些风险:

在system.web / authentication / forms元素:

  1. requireSSL =真。这要求cookie只能通过SSL传输
  2. slidingExpiration =假。如果为true,则可以重新激活过期的票证。
  3. 无Cookie =假。不要在您试图强制执行安全性的环境中使用无cookie会话。
  4. enableCrossAppRedirects =假。如果为false,则不允许跨应用程序处理Cookie。
  5. 保护= ALL。使用machine.config或web.config中指定的计算机密钥加密和散列Forms Auth cookie。此功能可以阻止某人破解自己的cookie,因为此设置告诉系统生成cookie的签名,并在每个身份验证请求中,将签名与传递的cookie进行比较。
  6. 如果您愿意,可以通过在Session中添加某种身份验证信息(例如用户的用户名的哈希值)(从不使用纯文本用户名或密码)来添加一些保护。这将要求攻击者窃取Session cookie和Forms Auth cookie。

答案 1 :(得分:12)

可以窃取cookie的情况发生在公共无线环境中。虽然您或我永远不会在这样的设置中运行,但可能无法阻止您的客户这样做。

如果攻击者知道您所连接的安全网站,则可能会欺骗您的浏览器发布到同一网址的非安全版本。那时你的cookie被泄露了。

这就是为什么除了httpOnlyCookies之外你还要指定requireSSL="true"

<httpCookies httpOnlyCookies="true" requireSSL="true" />

我不同意The Rook的评论,因为我认为这是不公平的;

  @Aristos我更新了我的答案。但说实话,如果您使用的是Microsoft开发平台,那么您的应用程序本质上就是不安全的。 - The Rook 22分钟前

安全不会偶然发生,并且不会“开箱即用”,至少不是我的经验。无论平台或工具如何,没有任何东西是安全的,无论平台或工具如何。

答案 2 :(得分:3)

在很多情况下,用于身份验证的cookie与服务器上的会话相匹配,因此不仅可以获取cookie并“登录”,但是,您可能希望阅读有关交叉的内容网站请求伪造,允许恶意使用此cookie的机制:

http://en.wikipedia.org/wiki/Cross-site_request_forgery

答案 3 :(得分:2)

会话ID可以通过多种方式泄露给攻击者。 XSS是劫持会话ID的最常用攻击,您应该在应用程序中test for XSS vulnerabilities。 。提高会话强度的常用方法是检查IP地址。用户登录时,记录IP地址。检查每个请求的IP地址,如果IP更改,那么它可能是一个被劫持的会话。这种安全措施可能会阻止合法请求,但非常不太可能。

检查X-Forwarded-For或User-Agent,攻击者修改这些值是微不足道的。

我还建议在web.config文件中启用httpOnlyCookies:

<httpCookies httpOnlyCookies="true"/>

这使攻击者更难以用javascript劫持会话,但仍然可能。

答案 4 :(得分:1)

我不知道有问题的cookie的具体情况,但将用户名和密码存储在用户cookie中通常是不好的做法。您通常只想将用户名存储在cookie中以及其他非敏感信息。这样,只有在登录时才会提示用户提供密码。

答案 5 :(得分:1)

我正在研究这个问题,我想出了一个想法,我不确定它是否100%安全,但这是一个想法。

我的想法是每个用户都必须从登录页面传递。
如果有人偷了cookie,没有通过登录页面,而是直接进入其余页面。他无法通过登录页面,因为不知道真正的密码,所以如果他无论如何他都会失败。

所以我放置了一个额外的会话值,用户已成功通过登录页面。 现在在每个关键页面中,我检查了额外的会话值,如果发现它为空,我登录并再次询问密码。

现在我不知道,也许所有这一切都由微软做好,需要更多检查。

要检查这个想法,我使用这个直接让用户登录的功能。

FormsAuthentication.SetAuthCookie("UserName", false);

我已经准备好修复和使用的第二个安全性是我从同一个登录用户检查不同的ips和/或不同的cookie。我已经做了很多考虑,很多检查(如果是代理,如果是来自不同的国家,有什么寻找,有多少次我看到他等等),但这是一般的想法。

This video显示我试图阻止的内容。通过使用我在此描述的技巧,您不能只设置登录cookie。

只是分享我的想法......