[object Object]

← back to AsSeenInMovies

asseeninmovies: minimal security headers (X-Content-Type-Options nosniff, X-Frame-Options SAMEORIGIN, Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy default-deny on geo/mic/camera/payment). 52/52.

cc62349ffd27ed6bd027bef93db32d3ca2b06b2a · 2026-05-13 04:11:34 -0700 · SteveStudio2

Files touched

Diff

commit cc62349ffd27ed6bd027bef93db32d3ca2b06b2a
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed May 13 04:11:34 2026 -0700

    asseeninmovies: minimal security headers (X-Content-Type-Options nosniff, X-Frame-Options SAMEORIGIN, Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy default-deny on geo/mic/camera/payment). 52/52.
---
 server.js | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/server.js b/server.js
index 12a2302..446f64b 100644
--- a/server.js
+++ b/server.js
@@ -45,6 +45,17 @@ app.set('trust proxy', 1);
 // gzip compression for all responses ≥ 1KB. Big leverage on JSON-LD-heavy
 // HTML pages — /movies and /spotted carry full ItemList payloads now.
 app.use(compression({ threshold: 1024 }));
+// Minimal security headers — sod has the full helmet suite but asim has
+// the Big Red iframe widget which complicates CSP, so we set the
+// uncontroversial ones manually: clickjacking, MIME-sniffing, referrer
+// leak, and permissions-policy default deny.
+app.use((req, res, next) => {
+  res.setHeader('X-Content-Type-Options', 'nosniff');
+  res.setHeader('X-Frame-Options', 'SAMEORIGIN');
+  res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
+  res.setHeader('Permissions-Policy', 'geolocation=(), microphone=(), camera=(), payment=()');
+  next();
+});
 app.use(express.json({ limit: '2mb' }));
 app.disable('x-powered-by');
 

← e810f9c asseeninmovies: home cta-row — add SPOTTED browse-link along  ·  back to AsSeenInMovies  ·  asseeninmovies: pin engines.node>=20 in package.json. Mirror 999138e →