Skip to content

Commit b1a024d

Browse files
Chan Chak ShingHainish
authored andcommitted
Fix some CORS issues in HTTP Nowhere mode (EFForg#15606)
1 parent 164d3d9 commit b1a024d

1 file changed

Lines changed: 30 additions & 9 deletions

File tree

chromium/background-scripts/background.js

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,8 @@ function onErrorOccurred(details) {
579579
}
580580

581581
/**
582-
* handle webrequest.onHeadersReceived, insert upgrade-insecure-requests directive
582+
* handle webrequest.onHeadersReceived, insert upgrade-insecure-requests directive and
583+
* rewrite access-control-allow-origin if presented in HTTP Nowhere mode
583584
* @param details details for the chrome.webRequest (see chrome doc)
584585
*/
585586
function onHeadersReceived(details) {
@@ -591,27 +592,47 @@ function onHeadersReceived(details) {
591592
return {};
592593
}
593594

595+
let responseHeadersChanged = false;
596+
let cspHeaderFound = false;
597+
594598
for (const idx in details.responseHeaders) {
595599
if (details.responseHeaders[idx].name.match(/Content-Security-Policy/i)) {
596600
// Existing CSP headers found
601+
cspHeaderFound = true;
597602
const value = details.responseHeaders[idx].value;
598603

599604
// Prepend if no upgrade-insecure-requests directive exists
600605
if (!value.match(/upgrade-insecure-requests/i)) {
601606
details.responseHeaders[idx].value = "upgrade-insecure-requests; " + value;
602-
return {responseHeaders: details.responseHeaders};
607+
responseHeadersChanged = true;
603608
}
604-
return {};
605609
}
610+
611+
if (details.responseHeaders[idx].name.match(/Access-Control-Allow-Origin/i)) {
612+
// Existing access-control-allow-origin header found
613+
const value = details.responseHeaders[idx].value;
614+
615+
// If HTTP protocol is used, change it to HTTPS
616+
if (value.match(/http:/)) {
617+
details.responseHeaders[idx].value = value.replace(/http:/g, "https:");
618+
responseHeadersChanged = true;
619+
}
620+
}
621+
}
622+
623+
if (!cspHeaderFound) {
624+
// CSP headers not found
625+
const upgradeInsecureRequests = {
626+
name: 'Content-Security-Policy',
627+
value: 'upgrade-insecure-requests'
628+
}
629+
details.responseHeaders.push(upgradeInsecureRequests);
630+
responseHeadersChanged = true;
606631
}
607632

608-
// CSP headers not found
609-
const upgradeInsecureRequests = {
610-
name: 'Content-Security-Policy',
611-
value: 'upgrade-insecure-requests'
633+
if (responseHeadersChanged) {
634+
return {responseHeaders: details.responseHeaders};
612635
}
613-
details.responseHeaders.push(upgradeInsecureRequests);
614-
return {responseHeaders: details.responseHeaders};
615636
}
616637
return {};
617638
}

0 commit comments

Comments
 (0)