JavaScript和第三方Cookie

时间:2010-07-29 14:25:02

标签: javascript cookies cross-domain

假设有一个网站foo.com从网站bar.com加载JavaScript。现在,假设网站bar.com中的JavaScript尝试使用document.cookies读取Cookie。我的印象是使用JavaScript,您可以阅读浏览器中设置的所有cookie,无论其来源如何。但事实证明,网站bar.com中的JavaScript只能访问由bar.com设置的Cookie,而不能访问其他任何Cookie。如果是这种情况,那么窃取cookie的脚本注入攻击是如何进行的?

3 个答案:

答案 0 :(得分:7)

  

但事实证明,网站bar.com上的JavaScript只能访问bar.com设置的cookie,而不能访问其他任何cookie。

事实并非如此。重要的是包含<script>元素的HTML文档的位置,而不是在src属性中提到<script>的JS文件的URL。

我怀疑您的问题是,当您调用该属性document.cookies时,您正在访问document.cookie奇异!

答案 1 :(得分:3)

他们在受攻击的页面中加载脚本。

例如,当博客系统中的评论遭到破坏时,它们包含在呈现页面时执行的script元素。该脚本可以获取cookie并将其发送给攻击者的服务器。

这就是为什么你从不信任用户输入并且至少拒绝评论中的某些标记(或将<翻译为&lt;)。但是不要在客户端这样做,因为这种预防技术很容易被规避;测试(和更改)服务器端的恶意输入。

答案 2 :(得分:3)

您只能访问为给定域名设置的Cookie。来自Wikipedia article on cookies

  

在名称/值对旁边,一个cookie   也可能包含到期日期,a   路径,域名,以及是否   cookie仅用于加密   连接。 RFC 2965强制要求cookie   有版本号,但这是   通常省略。这些数据   按照name = newvalue对进行操作   用分号分隔。例如,   可以由服务器创建cookie   通过发送一行Set-Cookie:   命名= NEWVALUE;到期日期=;路径= /;   域= .example.org。

     

域名和   路径告诉浏览器cookie   必须在发送时返回服务器   请求给定域的URL和   路径。如果未指定,则默认为   到对象的域和路径   被要求的。结果,   域和路径字符串可以告诉   浏览器发送cookie时   通常不会。为了安全   原因,cookie只接受   如果服务器是。的成员   域名字符串指定的域。

如果foo.com发送了域名为bar.com,甚至.com的Cookie,则bar.com上的JavaSCript代码可以读取该Cookie。但是,大多数浏览器都配置为仅在域名匹配时接受cookie,并拒绝此类cookie。