一个主要社交网站(使用旧浏览器)的早期黑客攻击之一是:
<script>
标记 发送了一个cookie,所以请求被认证并且使用纯JSON(不可运行)代码进行响应 - 但是由于我们覆盖了数组ctor,我们可以获取数据。 / LI>
那很好(这是我的问题的预览)。
问题
答案 0 :(得分:1)
如果说浏览器向某个域请求的任何资源都会在请求中发送cookie,那会不会更准确。实际上,任何从服务器“加载”任何资源的元素都会发送cookie。所以我会说图像,json文件,html / php文件,外部CSS文件以及可能的web字体会发送cookie。 This could be one of the reasons why you would want to host your resources (scripts,CSS files, images) on another domain as an optimisation thing.
此JSFiddle主要证明CSS文件可以“记住”。
HTML
<link href="remember.php?.css" rel="stylesheet"/>
<a href="#" id="red">Remember Red</a>
Javascript
red.onclick=function(e){
var img=new Image()
img.src="remember.php?col=red"
return false
}
remember.php
if(isset($_GET["col"])){
$_SESSION["fav_color"]=$_GET["col"];
}
echo "body {
color:".htmlentities(@$_SESSION["fav_color"] ?: "blue")."
}";
所以应该发生的是,当我们加载带有URI remember.php?col=red
的图像时,服务器即使在刷新时也会记住颜色值。与图像相同的主体,我会假设网络字体。
另一个例子是图像。哪个应该在加载时发送cookie。但是,例如,stackoverflow.com托管另一个域中的图像(在这种情况下,布局内容在cdn.sstatic.net/stackoverflow/img/sprites.png上)。即使它确实发送了,我们通常也不知道是否发送了cookie,除非cookie以某种方式影响图像。但是,如果我们检查开发人员工具,我们会注意到cookie会被发送。例如:
在php.net上托管的图片
在不同的域上的相同图像
如您所见,Cookie会被发送。即使是跨域。作为进一步的证明,remember.php
演示,但有图像。
HTML
<img src="http://mfirdaus.net/random/so/remember_image.php"/>
<a href="#" id="toggle">Toggle Image</a>
的Javascript
toggle.onclick=function(){
var img=new Image()
img.src="http://mfirdaus.net/random/so/remember_image.php?toggle"
img.onerror=function(){
window.location=window.location
}
return false
}
remember_image.php
if(isset($_GET["toggle"])){
$_SESSION["like_cats"]=!@$_SESSION["like_cats"];
die();
}
echo file_get_contents(@$_SESSION["like_cats"] ? "cat.jpeg" : "duck.jpeg" );
在这个演示中,cookie确实会影响图像,因此更容易判断cookie是否随图像一起发送。
现在该资源是否包含特权数据(例如包含好友列表的JSON数据),并且调用此资源的页面能够使用此特权数据(在这种情况下,通过执行魔法javascript来利用JSON)是另一回事。浏览器应该足够安全,以确保大多数明显的向量。 We can't even access other domain's images directly to put in canvases due to security。但是,浏览器供应商当然会遇到那些讨厌的漏洞和漏洞。
我过去常常使用这个事实来制作一个Firefox扩展,它只是删除网站的经过身份验证的页面,以显示带有解析数据的侧边栏,因为Firefox扩展中的ajax与普通页面没有相同的域限制,而我没有必要做任何特别的事情来进行身份验证,因为ajax会按照人们的预期发送cookie。