fix bad http credentials causing a dos attack cause firefox is the best browser
This commit is contained in:
52
ext/bg.js
52
ext/bg.js
@@ -12,6 +12,7 @@ var global_ws = null;
|
||||
var container_count = 0;
|
||||
|
||||
var proxy_map = {};
|
||||
var proxy_map_http_attempts = new Map();
|
||||
|
||||
var web_response_whitelist = ["main_frame", "xmlhttprequest"];
|
||||
|
||||
@@ -201,6 +202,12 @@ function attach_ws_events(ws){
|
||||
|
||||
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");
|
||||
await set_status(STATUS_CONNECTED);
|
||||
});
|
||||
@@ -421,6 +428,15 @@ function attach_ws_events(ws){
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
switch(typeof msg.id){
|
||||
@@ -505,7 +521,6 @@ function attach_ws_events(ws){
|
||||
ws.addEventListener("close", async function(e){
|
||||
|
||||
console.log("ws: offline");
|
||||
webreq_completed = new Map();
|
||||
await set_status(STATUS_OFFLINE);
|
||||
});
|
||||
}
|
||||
@@ -604,6 +619,7 @@ browser.webRequest.onBeforeRequest.addListener(
|
||||
|
||||
resolve_func({success: false});
|
||||
webreq_completed.delete(details.requestId);
|
||||
proxy_map_http_attempts.delete(details.requestId);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -643,6 +659,7 @@ browser.webRequest.onBeforeRequest.addListener(
|
||||
|
||||
resolve_func({success: false});
|
||||
webreq_completed.delete(details.requestId);
|
||||
proxy_map_http_attempts.delete(details.requestId);
|
||||
}
|
||||
},
|
||||
{ urls: ["<all_urls>"] },
|
||||
@@ -690,6 +707,7 @@ browser.webRequest.onCompleted.addListener(
|
||||
|
||||
// clean up
|
||||
webreq_completed.delete(details.requestId);
|
||||
proxy_map_http_attempts.delete(details.requestId);
|
||||
},
|
||||
{ urls: ["<all_urls>"] }
|
||||
);
|
||||
@@ -703,9 +721,12 @@ browser.webRequest.onErrorOccurred.addListener(
|
||||
if(!web_response_whitelist.includes(page.type)){
|
||||
|
||||
webreq_completed.delete(page.requestId);
|
||||
proxy_map_http_attempts.delete(page.requestId);
|
||||
return;
|
||||
}
|
||||
|
||||
const proxy_config = proxy_map[page.cookieStoreId];
|
||||
|
||||
send_event(
|
||||
global_ws,
|
||||
{
|
||||
@@ -719,6 +740,7 @@ browser.webRequest.onErrorOccurred.addListener(
|
||||
);
|
||||
|
||||
webreq_completed.delete(page.requestId);
|
||||
proxy_map_http_attempts.delete(page.requestId);
|
||||
},
|
||||
{ urls: ["<all_urls>"] }
|
||||
);
|
||||
@@ -728,8 +750,11 @@ browser.proxy.onRequest.addListener(function(request){
|
||||
const proxy_config = proxy_map[request.cookieStoreId];
|
||||
|
||||
if(
|
||||
proxy_config &&
|
||||
(
|
||||
proxy_config.type == "http" ||
|
||||
proxy_config.type == "https"
|
||||
)
|
||||
){
|
||||
|
||||
return {
|
||||
@@ -775,6 +800,31 @@ browser.webRequest.onAuthRequired.addListener(
|
||||
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 {
|
||||
authCredentials: {
|
||||
username: proxy_config.username,
|
||||
|
||||
Reference in New Issue
Block a user