一些黑客可以从用户那里窃取cookie,并在网站上用这个名字login?

读这个问题

不同的用户在aspxanonymous中获得相同的cookie值

并寻找一个解决scheme,我开始思考, 如果有可能某个人真的偷了一些cookie,然后把它放在他的浏览器和login让我们说作为pipe理员

你知道表单身份validation如何确保即使Cookie被篡改,黑客也不会实际login使用它吗?

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

先进的谢谢你。

是否可以窃取cookie并以pipe理员身份进行身份validation?

是的,如果表单身份validationcookie未encryption,则有人可能破解他们的cookie以提高他们的权限,或者如果SSL不需要,可以复制他人的cookie。 但是,您可以采取以下措施来缓解这些风险:

在system.web / authentication / forms元素上:

  1. requireSSL = TRUE。 这要求cookie只能通过SSL传输
  2. slidingExpiration = FALSE。 如果为true,则可以重新激活过期票证。
  3. 无Cookie =假。 不要在您尝试执行安全性的环境中使用无Cookie会话。
  4. enableCrossAppRedirects =假。 如果为false,则不允许在应用程序间处理Cookie。
  5. 保护=所有。 使用machine.config或web.config中指定的机器密钥encryption和散列Forms Auth cookie。 这个function可以阻止某人攻击他们自己的cookie,因为这个设置告诉系统生成一个cookie的签名,并在每个authentication请求上比较签名和传递的cookie。

如果你愿意的话,你可以通过在会话中join一些authentication信息来join一点保护措施,例如用户名(不要用纯文本的用户名和密码)。 这需要攻击者窃取Session cookie和Forms Auth cookie。

在公共无线环境中可能会发生cookie被盗的情况。 虽然你或我永远不会在这样的设置下运作,但可能不可能阻止你的客户这样做。

如果攻击者知道你连接的是什么安全的网站,这个想法是你的浏览器可能被诱骗发布到相同url的非安全版本。 在这一点上,你的cookie是妥协的。

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

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

我不同意刘翔的意见,因为我觉得这是不公平的;

@Aristos我更新了我的答案。 但说实话,如果你使用微软的开发平台,你的应用程序本质上是不安全的。 – 22分钟前的车

安全不是偶然发生的,它不会“开箱即用”,至less不是以我的经验。 没有什么是安全的,直到它被devise成这样,无论平台或工具如何。

在许多情况下,用于身份validation的cookie与服务器上的会话相匹配,因此不仅可以取得cookie并“login”,然而,您可能希望了解有关跨站点请求伪造,这确实允许恶意使用这个cookie的机制:

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

会话ID可以泄漏给攻击者的方法有很多种。 XSS是劫持会话ID的最常用的攻击,您应该testing应用程序中的XSS漏洞 。 。 提高会话强度的常用方法是检查IP地址。 当用户login时,logging该IP地址。 检查每个请求的IP地址,如果IP更改,则可能是被劫持的会话。 这种安全的措施可以防止合理的请求,但这是不太可能的。

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

我也build议在web.config文件中启用httpOnlyCookies:

 <httpCookies httpOnlyCookies="true"/> 

这使得攻击者使用javascript劫持会话变得更加困难,但仍然有可能。

我不知道有关cookie的具体情况,但通常不好的做法是将用户名和密码都存储在用户cookie中。 您通常只想将cookie中的用户名和其他非敏感信息一起存储。 这样,仅在login时提示用户提供他们的密码。

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

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

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

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

要检查这个想法,我使用这个函数直接让用户login。

 FormsAuthentication.SetAuthCookie("UserName", false); 

我准备修复和使用的第二个安全性是,我检查来自相同login用户的不同ips和/或不同cookie。 我就这方面做了很多的考虑,很多检查(如果是代理,如果是来自不同的国家,什么是找的,有多less次我看他等等),但这是总体思路。

这个video显示了我试图阻止的事情。 通过使用我在这里描述的技巧,你不能只设置logincookie。

只是分享我的想法…