Javascript 还为跨域请求发送cookie的HTML元素?

Javascript 还为跨域请求发送cookie的HTML元素?,javascript,html,cookies,cross-domain,Javascript,Html,Cookies,Cross Domain,一个主要社交网站(使用旧浏览器)的早期黑客攻击之一是: 登录到该站点,这样您就得到了一个cookie 创建引用“获取好友列表”url的脚本标记 通过JS重写数组构造函数 由于标记确实发送了一个cookie,因此请求通过了身份验证,并使用纯JSON(不可命名)代码进行了响应——但由于我们覆盖了数组,所以我们可以获得数据 那很好(这是我问题的预览) 问题 为跨域请求发送cookie的元素的完整列表是什么 如果说浏览器向某个域请求的任何资源都会在请求中发送cookie,这不是更准确吗。所以实际上

一个主要社交网站(使用旧浏览器)的早期黑客攻击之一是:

  • 登录到该站点,这样您就得到了一个cookie
  • 创建引用“获取好友列表”url的脚本标记
  • 通过JS重写数组构造函数 由于
    标记确实发送了一个cookie,因此请求通过了身份验证,并使用纯JSON(不可命名)代码进行了响应——但由于我们覆盖了数组,所以我们可以获得数据
那很好(这是我问题的预览)

问题

  • 为跨域请求发送cookie的元素的完整列表是什么

    • 如果说浏览器向某个域请求的任何资源都会在请求中发送cookie,这不是更准确吗。所以实际上,任何从服务器“加载”任何资源的元素都会发送cookie。所以我想说,图像、json文件、html/php文件、外部CSS文件以及可能的web字体都会发送cookie

      这主要证明CSS文件可以“记住”

      HTML

      记住.php

      if(isset($_GET["col"])){
          $_SESSION["fav_color"]=$_GET["col"];
      }
      
      echo "body {
       color:".htmlentities(@$_SESSION["fav_color"] ?: "blue")."  
      }";
      
      所以应该发生的是,当我们加载一个URI
      memory.php?col=red
      的图像时,即使在刷新时,服务器也会记住颜色值。同样的原则与图像,我会假设网络字体


      另一个例子是图像。加载时,应发送cookies。但是,例如,stackoverflow.com在另一个域中托管图像(在本例中,布局内容位于cdn.sstatic.net/stackoverflow/img/sprites.png)。即使它确实发送了,我们通常也不知道是否发送了cookie,除非cookie以某种方式影响了图像。但如果我们与开发人员工具核实一下,我们实际上会注意到cookies确实会被发送。例如:

      托管在php.net上的图像

      不同域上的相同图像

      正如你所看到的,cookies确实会被发送。即使跨域。作为进一步的证明,
      memory.php
      demo使用了图像

      HTML

      还记得_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是否与图像一起发送


      现在,该资源是否包含特权数据(例如包含friendlist的JSON数据)以及调用该资源的页面是否能够使用该特权数据(在本例中,通过使用神奇的javascript来利用JSON)是另一回事。浏览器应该足够安全,大多数明显的向量都应该得到保护。但当然,浏览器供应商将要处理这些令人讨厌的bug和漏洞


      我曾经利用这一事实制作了一个Firefox扩展,它只需抓取一个网站的经过身份验证的页面,就可以显示一个包含解析数据的边栏,因为Firefox扩展中的ajax没有与普通页面相同的域限制,而且我不必费心做任何特殊的验证,因为ajax会像人们期望的那样发送cookies。

      问得好!它不就是带有
      src
      属性的东西吗?我的问题是关于跨域请求的。在SO中的图像也“加载”资源,但不发送cookie。脚本标记的位置。@RoyiNamir我认为图像确实发送cookies。请查看我的编辑。我的意思是这样cookie就不会发送到其他域request@RoyiNamir我想如果你觉得答案并不能真正回答你的问题,也许你可以改进这个问题,因为我仍然觉得,不管怎样,饼干都会被发送出去。你是否能在它嵌入的其他领域中利用/阅读它们是另一回事。也许您想添加“从另一个域读取cookie信息”。或者XSS,这可能是你想要的。等等,你不同意上面的评论吗?当stackoverflow从imgur下载图像时,他不会发送他的SO域cookie。只有imgur cookie(如果他有)
      if(isset($_GET["col"])){
          $_SESSION["fav_color"]=$_GET["col"];
      }
      
      echo "body {
       color:".htmlentities(@$_SESSION["fav_color"] ?: "blue")."  
      }";
      
      <img src="http://mfirdaus.net/random/so/remember_image.php"/>
      <a href="#" id="toggle">Toggle Image</a>
      
      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
      }
      
      if(isset($_GET["toggle"])){
          $_SESSION["like_cats"]=!@$_SESSION["like_cats"];
          die();
      }
      
      echo file_get_contents(@$_SESSION["like_cats"] ? "cat.jpeg" : "duck.jpeg" );