2011-11-09 51 views
50

有没有什么方法可以用javascript读取安全cookie?我试图用document.cookie来做,并且据我所见http://securitymusings.com/article/909/secure-cookies-the-httponly-flag我无法以这种方式访问​​安全cookie。如何使用JavaScript读取安全Cookie

任何人都可以为我提供解决方法吗?

+1

来自[wiki](http://en.wikipedia.org/wiki/HTTP_cookie):安全cookie仅在浏览器通过HTTPS访问服务器时使用。 –

+3

@Pavel Hodek这是错误的标志。 “安全”cookie标志与HTTPOnly安全标志无关。他们有一个可怕的命名系统。 – rook

回答

68

不同的浏览器enable different security measures when the HTTPOnly标志设置。例如Opera和Safari不会阻止JavaScript写入cookie。但是,所有主流浏览器的最新版本都禁止阅读。

但更重要的是为什么要读取HTTPOnly cookie?如果您是开发人员,只需禁用该标志并确保您的test your code for xss。我建议您尽可能避免禁用此标志。应该始终设置HTTPOnly标志和“安全标志”(强制cookie通过https发送)。

如果您是攻击者,那么您想要劫持会话。但是,尽管有HTTPOnly标志,但还是有一种简单的方法来劫持会话。您仍然可以在不知道会话ID的情况下参加会议。 MySpace Sammy worm就是这么做的。它使用XHR读取CSRF令牌,然后执行授权任务。因此,攻击者几乎可以做任何记录用户可以做的事情。

人们对HTTPOnly标志过于信任,XSS仍然可以被利用。您应该围绕敏感功能设置屏障。如更改密码字段应该要求当前密码。管理员创建新帐户的能力应该需要验证码,这是一个不容易绕过XHR的CSRF prevention technique

+0

请您详细说明蠕虫的事情吗?该链接不起作用,并且从互联网上也没有真正理解。谢谢。 –

+0

@Abhishek Jebaraj如果你不了解sammy蠕虫或CSRF标记,那么先尝试理解[同源策略]的限制(https://developer.mozilla.org/en-US/docs/Web /安全性/同-origin_policy) – rook

27

HttpOnly cookies的重点在于它们不能被JavaScript访问。

脚本读取它们的唯一方法(除了利用浏览器错误)是在服务器上有一个协作脚本,它将读取cookie值并将其作为响应内容的一部分进行回显。但是如果你能做到这一点,为什么首先使用HttpOnly cookie呢?

+0

这应该是一个。 – steo

+0

您可能需要对其进行测试,以确定用户浏览器是否正确处理HttpOnly中的cookies,然后允许用户从特定浏览器使用您的网站。我正在寻找一个可以确保浏览器支持HttpOnly标志的例子。 MS也建议这样做,但没有进一步的建议如何:[缓解与HttpOnly XSS](https://msdn.microsoft.com/en-us/library/ms533046.aspx#httponly) – Ursegor

+0

我发现他们建议浏览器版本白名单。我可能是错的,但它不是一个方便的方式来检查从JavaScript的支持,而不是?你能提出一些关于这个的抽屉吗? – Ursegor