Skip to main content

Inputs & Storage Security

Harden files, secrets, at-rest encryption, and keep cards out of scope.

C
Written by Catalin Fetean
Updated over 2 weeks ago

Audience: Backend, SecOps, Finance
​Outcomes: Safe uploads, secret hygiene, and minimal PCI footprint

File uploads (limits + AV + quarantine)

const upload = multer({ limits:{ fileSize:10*1024*1024, files:6 }, fileFilter:(req,file,cb)=>{ const ok = ['image/','application/pdf','text/','application/zip', 'application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document']; cb(ok.some(t=>file.mimetype.startsWith(t))?null:new Error('File type not allowed'), ok); } });
  • AV scan on arrival; quarantine suspicious.

  • Store outside web root; serve via signed URLs or role checks.

Secrets & rotation

  • Use a secrets manager; separate test/prod; least privilege.

  • Rotate webhook/API secrets regularly; audit rotation.

Encryption at rest

  • DB/object store provider encryption (AES-256);

  • For high-sensitivity fields use app-level envelope encryption (keys in KMS).

PCI scope reduction

  • Use Stripe Checkout/Elements; never handle raw PANs.

  • Restrict CSP scriptSrc/frameSrc/connectSrc to Stripe domains.

QA checklist

  • Upload rejects >10 MB or wrong MIME with clear error.

  • No secrets in logs/env diffs; rotation procedure documented.

Runbook: suspected secret leak

  1. Generate new secret; deploy;

  2. Invalidate old;

  3. Re-verify webhook signatures;

  4. Review past 24–72h events;

  5. Post-mortem.

Did this answer your question?