You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.5 KiB
JavaScript
96 lines
2.5 KiB
JavaScript
console.log("PROBLEMATIC REQUESTS");
|
|
|
|
let memory = {};
|
|
|
|
function gethost(url) {
|
|
return new URL(request.url).host;
|
|
}
|
|
|
|
function getshorthost(host) {
|
|
console.log("getshort", host);
|
|
return host.split(".").slice(-2).join(".");
|
|
}
|
|
|
|
// const isThirdParty = (arg) => arg.urlClassification.thirdParty.length > 0;
|
|
async function isThirdParty(request) {
|
|
const request_url = new URL(request.url);
|
|
const origin_url = new URL(await getOrigin(request));
|
|
/* console.log(request_url.ho, origin_url, request_url.includes(origin_url)); */
|
|
console.log(
|
|
request_url.host,
|
|
origin_url.host,
|
|
request_url.host.includes(origin_url.host)
|
|
);
|
|
if (request_url.host.includes(origin_url.host)) {
|
|
return false;
|
|
}
|
|
if (getshorthost(request_url.host) == getshorthost(origin_url.host)) {
|
|
return false;
|
|
}
|
|
return (
|
|
request_url.origin != origin_url.origin ||
|
|
request.urlClassification.thirdParty.length > 0
|
|
);
|
|
}
|
|
const hasCookie = (arg) => arg.requestHeaders.some((h) => h.name === "Cookie");
|
|
const hasReferer = (arg) =>
|
|
arg.requestHeaders.some((h) => h.name === "Referer");
|
|
|
|
const getReferer = (arg) =>
|
|
arg.requestHeaders.filter((h) => h.name === "Referer")[0].value;
|
|
|
|
const getOrigin = async (arg) => {
|
|
let url;
|
|
if (arg.tabId && arg.tabId >= 0) {
|
|
const tab = await browser.tabs.get(arg.tabId);
|
|
url = tab.url;
|
|
} else {
|
|
url = arg.frameAncestors[0].url;
|
|
}
|
|
|
|
return url;
|
|
};
|
|
|
|
const exposesOrigin = async (arg) => {
|
|
return getReferer(arg).includes(new URL(await getOrigin(arg)).host);
|
|
};
|
|
|
|
browser.webRequest.onBeforeSendHeaders.addListener(
|
|
async (request) => {
|
|
if (
|
|
(await isThirdParty(request)) &&
|
|
hasReferer(request) &&
|
|
(await exposesOrigin(request))
|
|
) {
|
|
const has_cookie = hasCookie(request);
|
|
if (!memory[request.tabId]) {
|
|
memory[request.tabId] = {};
|
|
}
|
|
const shorthost = getshorthost(new URL(request.url).host);
|
|
if (!memory[request.tabId][shorthost]) {
|
|
memory[request.tabId][shorthost] = [];
|
|
}
|
|
memory[request.tabId][shorthost].push({
|
|
url: request.url,
|
|
has_cookie,
|
|
cookie: request.requestHeaders.find((h) => h.name == "Cookie")?.value,
|
|
});
|
|
}
|
|
},
|
|
{ urls: ["<all_urls>"] },
|
|
["requestHeaders"]
|
|
);
|
|
|
|
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
|
|
if (sender.tab) {
|
|
return;
|
|
}
|
|
console.log("got message!", request);
|
|
if (request?.msg === "get_memory") {
|
|
sendResponse(memory);
|
|
} else if (request?.msg === "clear_memory") {
|
|
console.log("memory cleared");
|
|
memory = {};
|
|
}
|
|
});
|