> 文章列表 > 谷歌插件Fetch在不同页面之间Cookie携带情况详解

谷歌插件Fetch在不同页面之间Cookie携带情况详解

谷歌插件Fetch在不同页面之间Cookie携带情况详解

content script 和 script inject 表现情况

在碰到content script 注入和用script标签注入一样,即使服务端有写入Cookie到域名下在该tab标签应用下也不会被保存,所以在发送时也无法自动携带,所以通过content script和<script>这种方式无法传输隐式传输cookie,只能通过background来先拿到cookie再进行传送

服务端往请求端写入Cookie,服务端做了跨域允许,不允许跨域就没必要讨论这个逻辑了(注意注入的网站如何是https的则不能使用http协议,浏览器不允许)

<?php
/*** 功能:授权验证父类* @author wangsen* @date 2021/07/10 10:52:00* @version 1.0.0.0* @brief**/namespace app\\controllers;use app\\behaviors\\BeforeSendBehavior;
use Yii;
use yii\\filters\\Cors;class ApiController extends Controller
{public function behaviors(){$behaviors = parent::behaviors();return array_merge($behaviors, ['corsFilter' => ['class' => Cors::class,'cors' => $this->corsConfig()], BeforeSendBehavior::class]);}public function corsConfig(){$origin = Yii::$app->request->headers->get("Origin");return ['Origin' => [$origin],'Access-Control-Request-Method' => ['POST', 'PUT', 'OPTION', 'GET'],'Access-Control-Request-Headers' => ['Authorization', 'Content-Type'],'Access-Control-Allow-Credentials' => true,'Access-Control-Max-Age' => 3600,'Access-Control-Expose-Headers' => ['X-Pagination-Current-Page'],];}
}

谷歌插件Fetch在不同页面之间Cookie携带情况详解

 插件端采用<script>方式注入js脚本

谷歌插件Fetch在不同页面之间Cookie携带情况详解

inject-fetch.js 脚本

fetch("https://test.zfscrmteam.top:444/cookie/index", {"referrer": "https://blog.csdn.net/qq_36361250/article/details/114270670","referrerPolicy": "unsafe-url","body": null,"method": "GET","mode": "cors","credentials": "include"
}).then(e => console.log(e));

在当前应用下始终写不进Cookie

谷歌插件Fetch在不同页面之间Cookie携带情况详解 同域情况下注入和<script> 是会自动携带Cookie的,当然这种情况插件基本用不到

谷歌插件Fetch在不同页面之间Cookie携带情况详解 

归根结底,凡是当前tab应用中没有存放Cookie的,这个域下面的Cookie就不会自动携带

谷歌插件Fetch在不同页面之间Cookie携带情况详解 

结论就是content script 和 script 脚本注入方式,都必须显式地将cookie放在body中传输,而不能由浏览器自动装填在header.Cookie传给后端

popup.html 和 background.js

这两者是相似的,只要服务端允许跨域,则都可以请求服务端,但奇特的是,如果host_permission不设置,设置了content script match 则携带Cookie

谷歌插件Fetch在不同页面之间Cookie携带情况详解

 

谷歌插件Fetch在不同页面之间Cookie携带情况详解

若content script 中没有匹配,则不携带

谷歌插件Fetch在不同页面之间Cookie携带情况详解 

 

谷歌插件Fetch在不同页面之间Cookie携带情况详解

 若在host_permissions里面配置,则又会携带,所以证明content script中的matches和host_permissions竟然有交集,这个细节还是挺隐蔽的

谷歌插件Fetch在不同页面之间Cookie携带情况详解

 谷歌插件Fetch在不同页面之间Cookie携带情况详解

 完全无权限的情况探究下background.js,请求中不懈怠Cookie

谷歌插件Fetch在不同页面之间Cookie携带情况详解

 在content script 进行matches匹配,效果同popup.html ,证明在权限上,两者表现相同

谷歌插件Fetch在不同页面之间Cookie携带情况详解

 结论

在处理Cookie相关事务时,想默认携带Cookie,只能采用popup.html或者background的方式,同时在content_scripts.matches 不能满足时,要添加host_permisssions来获取权限