[object Object]

← back to Whatsmystyle

gitignore snapshot-file patterns + 404-guard middleware

cabe76a9e39c8d732dd2b1c91b11973743655a4b · 2026-05-19 21:41:35 -0700 · SteveStudio2

Broadens .gitignore to cover *.bak / *.bak.* / *.pre-* / *.orig / *.rej
so editor backups and patcher snapshots never get committed. Adds an
Express middleware before express.static that 404s any request whose
path matches those patterns, as defense-in-depth.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit cabe76a9e39c8d732dd2b1c91b11973743655a4b
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date:   Tue May 19 21:41:35 2026 -0700

    gitignore snapshot-file patterns + 404-guard middleware
    
    Broadens .gitignore to cover *.bak / *.bak.* / *.pre-* / *.orig / *.rej
    so editor backups and patcher snapshots never get committed. Adds an
    Express middleware before express.static that 404s any request whose
    path matches those patterns, as defense-in-depth.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 .gitignore | 5 +++++
 server.js  | 7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/.gitignore b/.gitignore
index b8caf38..e94341d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,8 @@ build/
 data/*.db
 data/*.db-journal
 data/uploads/
+*.bak
+*.bak.*
+*.pre-*
+*.orig
+*.rej
diff --git a/server.js b/server.js
index 56af680..dba6bd7 100644
--- a/server.js
+++ b/server.js
@@ -351,6 +351,13 @@ app.use(session({
   saveUninitialized: true,
   cookie: { httpOnly: true, sameSite: 'lax', maxAge: 1000 * 60 * 60 * 24 * 90 }
 }));
+// Snapshot-file 404-guard: refuse to serve *.bak / *.pre-* / *.orig / *.rej
+// from static root regardless of what's on disk. Defense-in-depth against an
+// accidental rsync of an editor backup leaking server-side state to the web.
+app.use((req, res, next) => {
+  if (/\.(bak|orig|rej)(\.|$)|\.pre-/.test(req.path)) return res.status(404).end();
+  next();
+});
 app.use(express.static(path.join(__dirname, 'public')));
 
 const upload = multer({ dest: UPLOAD_DIR, limits: { fileSize: 25 * 1024 * 1024 } });

← 41ce55c add rel="noopener noreferrer" to fav-share fallback link  ·  back to Whatsmystyle  ·  Add per-site favicon (kills /favicon.ico 404) 89e1682 →