2010-07-29 86 views
6

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

回答

5

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

这是不正确的。重要的是包含<script>元素的HTML文档的位置,而不是在src属性中提到的<script>提到的JS文件的URL。

我怀疑你的问题是,你正在访问document.cookies当属性被称为document.cookie奇异!

+0

这也是CDN的工作方式,就像本站加载的jQuery脚本一样:'http:// ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js' does not活在域名'stackoverflow.com'上。 – 2010-07-29 14:45:55

+0

@David,在输入问题时,cookie是拼写错误。我刚刚尝试alert(document.cookie),尽管设置了cookie,但我只是得到一个空字符串。我很困惑。 – roger 2010-07-29 14:59:31

+0

我做了一个测试。该域名没有任何不同。也许您试图获取的Cookie位于不同的路径上,或者仅设置为HTTP。 – Quentin 2010-07-29 15:26:34

3

他们加载脚本里面的被攻击的页面。

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

这就是为什么你应该永远信任用户的输入,并在注释中不允许至少某些标签(或翻译每<&lt;)。但是不要在客户端这样做,因为这种预防技术很容易被绕开;测试(和更改)服务器端的恶意输入。

3

您只能在已经设定为给定的域名访问的cookies。从Wikipedia article on cookies

旁名称/值对,一个cookie 还可包含过期日期,一个 路径,一个域名和 cookie是否仅用于加密 连接。 RFC 2965要求cookie 有一个版本号,但这通常是 省略。这些数据段 遵循name = newvalue对,并且用分号分隔 。例如, cookie可以由服务器 通过发送一行Set-Cookie创建: name = newvalue;到期日期=;路径= /; domain = .example.org。

域和 路径告诉该cookie 必须发送回服务器浏览器的时候 请求给定域和 路径的网址。如果未指定,则会将 默认为请求的对象 的域和路径。因此, 域名和路径字符串可能会告诉 浏览器发送Cookie,而其中的 通常不会。对于安全性 的原因,如果服务器是由域字符串指定的域名 的成员,则Cookie仅被接受 。

如果foo.com发送cookie其中有中bar.com域名,甚至.com,然后JavaScript代码bar.com可以读取该cookie。但是,大多数浏览器被配置为只在域名匹配时才接受cookie,并且会拒绝这样的cookie。

+0

我确认cookie存在,但JavaScript无法读取它。 – roger 2010-07-29 15:00:58