fix bad http credentials causing a dos attack cause firefox is the best browser
This commit is contained in:
56
ext/bg.js
56
ext/bg.js
@@ -12,6 +12,7 @@ var global_ws = null;
|
|||||||
var container_count = 0;
|
var container_count = 0;
|
||||||
|
|
||||||
var proxy_map = {};
|
var proxy_map = {};
|
||||||
|
var proxy_map_http_attempts = new Map();
|
||||||
|
|
||||||
var web_response_whitelist = ["main_frame", "xmlhttprequest"];
|
var web_response_whitelist = ["main_frame", "xmlhttprequest"];
|
||||||
|
|
||||||
@@ -201,6 +202,12 @@ function attach_ws_events(ws){
|
|||||||
|
|
||||||
ws.addEventListener("open", async function(){
|
ws.addEventListener("open", async function(){
|
||||||
|
|
||||||
|
// clean up internal previous garbage
|
||||||
|
webreq_completed = new Map();
|
||||||
|
proxy_map = {};
|
||||||
|
proxy_map_http_attempts = new Map();
|
||||||
|
web_response_whitelist = ["main_frame", "xmlhttprequest"];
|
||||||
|
|
||||||
console.log("ws: connected");
|
console.log("ws: connected");
|
||||||
await set_status(STATUS_CONNECTED);
|
await set_status(STATUS_CONNECTED);
|
||||||
});
|
});
|
||||||
@@ -421,6 +428,15 @@ function attach_ws_events(ws){
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "container_delete":
|
case "container_delete":
|
||||||
|
// clear http proxy cache
|
||||||
|
try{
|
||||||
|
|
||||||
|
await browser.webRequest.handlerBehaviorChanged();
|
||||||
|
}catch(err){
|
||||||
|
|
||||||
|
console.log("warn: http proxy cache flush failed: " + err);
|
||||||
|
}
|
||||||
|
|
||||||
var deleted_containers = 0;
|
var deleted_containers = 0;
|
||||||
|
|
||||||
switch(typeof msg.id){
|
switch(typeof msg.id){
|
||||||
@@ -505,7 +521,6 @@ function attach_ws_events(ws){
|
|||||||
ws.addEventListener("close", async function(e){
|
ws.addEventListener("close", async function(e){
|
||||||
|
|
||||||
console.log("ws: offline");
|
console.log("ws: offline");
|
||||||
webreq_completed = new Map();
|
|
||||||
await set_status(STATUS_OFFLINE);
|
await set_status(STATUS_OFFLINE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -604,6 +619,7 @@ browser.webRequest.onBeforeRequest.addListener(
|
|||||||
|
|
||||||
resolve_func({success: false});
|
resolve_func({success: false});
|
||||||
webreq_completed.delete(details.requestId);
|
webreq_completed.delete(details.requestId);
|
||||||
|
proxy_map_http_attempts.delete(details.requestId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -643,6 +659,7 @@ browser.webRequest.onBeforeRequest.addListener(
|
|||||||
|
|
||||||
resolve_func({success: false});
|
resolve_func({success: false});
|
||||||
webreq_completed.delete(details.requestId);
|
webreq_completed.delete(details.requestId);
|
||||||
|
proxy_map_http_attempts.delete(details.requestId);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ urls: ["<all_urls>"] },
|
{ urls: ["<all_urls>"] },
|
||||||
@@ -690,6 +707,7 @@ browser.webRequest.onCompleted.addListener(
|
|||||||
|
|
||||||
// clean up
|
// clean up
|
||||||
webreq_completed.delete(details.requestId);
|
webreq_completed.delete(details.requestId);
|
||||||
|
proxy_map_http_attempts.delete(details.requestId);
|
||||||
},
|
},
|
||||||
{ urls: ["<all_urls>"] }
|
{ urls: ["<all_urls>"] }
|
||||||
);
|
);
|
||||||
@@ -703,9 +721,12 @@ browser.webRequest.onErrorOccurred.addListener(
|
|||||||
if(!web_response_whitelist.includes(page.type)){
|
if(!web_response_whitelist.includes(page.type)){
|
||||||
|
|
||||||
webreq_completed.delete(page.requestId);
|
webreq_completed.delete(page.requestId);
|
||||||
|
proxy_map_http_attempts.delete(page.requestId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const proxy_config = proxy_map[page.cookieStoreId];
|
||||||
|
|
||||||
send_event(
|
send_event(
|
||||||
global_ws,
|
global_ws,
|
||||||
{
|
{
|
||||||
@@ -719,6 +740,7 @@ browser.webRequest.onErrorOccurred.addListener(
|
|||||||
);
|
);
|
||||||
|
|
||||||
webreq_completed.delete(page.requestId);
|
webreq_completed.delete(page.requestId);
|
||||||
|
proxy_map_http_attempts.delete(page.requestId);
|
||||||
},
|
},
|
||||||
{ urls: ["<all_urls>"] }
|
{ urls: ["<all_urls>"] }
|
||||||
);
|
);
|
||||||
@@ -728,8 +750,11 @@ browser.proxy.onRequest.addListener(function(request){
|
|||||||
const proxy_config = proxy_map[request.cookieStoreId];
|
const proxy_config = proxy_map[request.cookieStoreId];
|
||||||
|
|
||||||
if(
|
if(
|
||||||
proxy_config.type == "http" ||
|
proxy_config &&
|
||||||
proxy_config.type == "https"
|
(
|
||||||
|
proxy_config.type == "http" ||
|
||||||
|
proxy_config.type == "https"
|
||||||
|
)
|
||||||
){
|
){
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -775,6 +800,31 @@ browser.webRequest.onAuthRequired.addListener(
|
|||||||
proxy_config.password
|
proxy_config.password
|
||||||
){
|
){
|
||||||
|
|
||||||
|
// check if creds have been tried before...
|
||||||
|
var attempts = proxy_map_http_attempts.get(details.requestId);
|
||||||
|
|
||||||
|
if(typeof attempts == "undefined"){
|
||||||
|
|
||||||
|
proxy_map_http_attempts.set(details.requestId, 1);
|
||||||
|
}else{
|
||||||
|
|
||||||
|
send_event(
|
||||||
|
global_ws,
|
||||||
|
{
|
||||||
|
"action": "dom_load_fail",
|
||||||
|
"data": {
|
||||||
|
id: details.tabId,
|
||||||
|
url: details.url,
|
||||||
|
error: "HTTP proxy refused the connection"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
webreq_completed.delete(details.requestId);
|
||||||
|
proxy_map_http_attempts.delete(details.requestId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
authCredentials: {
|
authCredentials: {
|
||||||
username: proxy_config.username,
|
username: proxy_config.username,
|
||||||
|
|||||||
Reference in New Issue
Block a user