Skip to content

Instantly share code, notes, and snippets.

@john-henry
Created October 10, 2022 02:14
Show Gist options
  • Save john-henry/f99fd2e702cb1014ec494cb98fbd35c3 to your computer and use it in GitHub Desktop.
Save john-henry/f99fd2e702cb1014ec494cb98fbd35c3 to your computer and use it in GitHub Desktop.
security-headers-worker for Cloudflare worker
const securityHeaders = {
"Content-Security-Policy": "upgrade-insecure-requests",
"Strict-Transport-Security": "max-age=31536000",
"X-Xss-Protection": "1; mode=block",
"X-Content-Type-Options": "nosniff",
"Referrer-Policy": "strict-origin-when-cross-origin",
"Connection":"keep-alive",
"X-Frame-Options":"SAMEORIGIN"
},
sanitiseHeaders = {
Server: ""
},
removeHeaders = [
"Public-Key-Pins",
"X-Powered-By",
"X-AspNet-Version"
];
async function addHeaders(req) {
const response = await fetch(req),
newHeaders = new Headers(response.headers),
setHeaders = Object.assign({}, securityHeaders, sanitiseHeaders);
if (newHeaders.has("Content-Type") && !newHeaders.get("Content-Type").includes("text/html")) {
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
});
}
Object.keys(setHeaders).forEach(name => newHeaders.set(name, setHeaders[name]));
removeHeaders.forEach(name => newHeaders.delete(name));
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
});
}
addEventListener("fetch", event => event.respondWith(addHeaders(event.request)));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment