假设有一个网站foo.com
从网站bar.com
加载JavaScript。现在,假设网站bar.com
中的JavaScript尝试使用document.cookies
读取Cookie。我的印象是使用JavaScript,您可以阅读浏览器中设置的所有cookie,无论其来源如何。但事实证明,网站bar.com
中的JavaScript只能访问由bar.com
设置的Cookie,而不能访问其他任何Cookie。如果是这种情况,那么窃取cookie的脚本注入攻击是如何进行的?
答案 0 :(得分:7)
但事实证明,网站bar.com上的JavaScript只能访问bar.com设置的cookie,而不能访问其他任何cookie。
事实并非如此。重要的是包含<script>
元素的HTML文档的位置,而不是在src属性中提到<script>
的JS文件的URL。
我怀疑您的问题是,当您调用该属性document.cookies
时,您正在访问document.cookie
(奇异!)
答案 1 :(得分:3)
他们在受攻击的页面中加载脚本。
例如,当博客系统中的评论遭到破坏时,它们包含在呈现页面时执行的script
元素。该脚本可以获取cookie并将其发送给攻击者的服务器。
这就是为什么你从不信任用户输入并且至少拒绝评论中的某些标记(或将<
翻译为<
)。但是不要在客户端这样做,因为这种预防技术很容易被规避;测试(和更改)服务器端的恶意输入。
答案 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。