1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-10-06 09:37: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 root = vAPI.getURL('/');
const secrets = [ generateSecret(), generateSecret(), generateSecret() ]; const secrets = [];
let lastSecretPtr = 0; let lastSecretTime = 0;
let lastSecretTime = Date.now();
const guard = function(details) { const guard = function(details) {
const url = details.url; 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 }; return { redirectUrl: root };
} }
secrets.splice(pos, 1);
}; };
chrome.webRequest.onBeforeRequest.addListener( chrome.webRequest.onBeforeRequest.addListener(
@ -1069,13 +1072,17 @@ vAPI.warSecret = (function() {
); );
return ( ) => { return ( ) => {
const now = Date.now(); if ( secrets.length !== 0 ) {
if ( (now - lastSecretTime) >= 1000 ) { if ( (Date.now() - lastSecretTime) > 5000 ) {
lastSecretPtr = (lastSecretPtr + 1) % secrets.length; secrets.splice(0);
secrets[lastSecretPtr] = generateSecret(); } else if ( secrets.length > 256 ) {
lastSecretTime = now; secrets.splice(0, secrets.length - 192);
}
} }
return `?secret=${secrets[lastSecretPtr]}`; lastSecretTime = Date.now();
const secret = generateSecret();
secrets.push(secret);
return `?secret=${secret}`;
}; };
})(); })();