1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-07-08 04:49:12 +02:00

Use per-request secret rather than time-based secret

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/550
This commit is contained in:
Raymond Hill 2019-05-01 07:41:04 -04:00
parent 8f01bc7faf
commit b87b242384
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2

View File

@ -1049,15 +1049,18 @@ vAPI.warSecret = (function() {
};
const root = vAPI.getURL('/');
const secrets = [ generateSecret(), generateSecret(), generateSecret() ];
let lastSecretPtr = 0;
let lastSecretTime = Date.now();
const secrets = [];
let lastSecretTime = 0;
const guard = function(details) {
const url = details.url;
if ( secrets.every(secret => url.indexOf(`?secret=${secret}`) === -1) ) {
const pos = secrets.findIndex(secret =>
url.lastIndexOf(`?secret=${secret}`) !== -1
);
if ( pos === -1 ) {
return { redirectUrl: root };
}
secrets.splice(pos, 1);
};
chrome.webRequest.onBeforeRequest.addListener(
@ -1069,13 +1072,17 @@ vAPI.warSecret = (function() {
);
return ( ) => {
const now = Date.now();
if ( (now - lastSecretTime) >= 1000 ) {
lastSecretPtr = (lastSecretPtr + 1) % secrets.length;
secrets[lastSecretPtr] = generateSecret();
lastSecretTime = now;
if ( secrets.length !== 0 ) {
if ( (Date.now() - lastSecretTime) > 5000 ) {
secrets.splice(0);
} else if ( secrets.length > 256 ) {
secrets.splice(0, secrets.length - 192);
}
}
return `?secret=${secrets[lastSecretPtr]}`;
lastSecretTime = Date.now();
const secret = generateSecret();
secrets.push(secret);
return `?secret=${secret}`;
};
})();