Fixed ETag filtering

Fixed https://github.com/ClearURLs/Addon/issues/276
This commit is contained in:
Kevin R
2022-11-26 00:21:23 +01:00
parent f1056cd778
commit a32708dcd1
2 changed files with 31 additions and 3 deletions

View File

@@ -31,8 +31,16 @@ function eTagFilter(requestDetails) {
continue;
}
const etag = header.value.toLowerCase();
const w = etag.startsWith('w');
const quotes = etag.endsWith('"');
let len = etag.length;
if (w) len -= 2;
if (quotes) len -= 2;
// insert dummy etag
requestDetails.responseHeaders[i].value = generateDummyEtag();
requestDetails.responseHeaders[i].value = generateDummyEtag(len, quotes, w);
pushToLog(requestDetails.url, requestDetails.url, translate("eTag_filtering_log"));
@@ -42,8 +50,19 @@ function eTagFilter(requestDetails) {
return {responseHeaders: requestDetails.responseHeaders};
}
function generateDummyEtag() {
return Math.random().toString();
/**
* Generates a random ETag.
*
* Must be ASCII characters placed between double quotes.
* See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
*/
function generateDummyEtag(len, quotes = true, w = false) {
let rtn = randomASCII(len);
if (quotes) rtn = '"' + rtn + '"';
if (w) rtn = 'W/' + rtn;
return rtn;
}
browser.webRequest.onHeadersReceived.addListener(

View File

@@ -328,3 +328,12 @@ async function sha256(message) {
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
/**
* Generates a non-secure random ASCII string of length {@code len}.
*
* @returns non-secure random ASCII
*/
function randomASCII(len) {
return [...Array(len)].map(() => (~~(Math.random() * 36)).toString(36)).join('');
}