Skip to content

security: harden default error handler — safe-by-default#51

Merged
jkyberneees merged 2 commits into
masterfrom
fix/safe-error-handler
May 14, 2026
Merged

security: harden default error handler — safe-by-default#51
jkyberneees merged 2 commits into
masterfrom
fix/safe-error-handler

Conversation

@jkyberneees
Copy link
Copy Markdown
Collaborator

BREAKING: DEFAULT_ERROR_HANDLER now only exposes error details in NODE_ENV=development (opt-in). All other modes — production, staging, testing, and unset NODE_ENV — return sanitized "Internal Server Error".

Previously, any mode except production leaked err.message to clients, which could expose DB queries, file paths, or internal state.

Changes:

  • lib/router/sequential.js: flip condition from === 'production' to === 'development', add Content-Type header
  • tests/nested-routers.test.js: expect sanitized response in test mode
  • tests/router-coverage.test.js: expect sanitized response in test mode
  • tests/v4.4.test.js: add NODE_ENV-unset test
  • tooling/pentest.js: comprehensive 48-vector security test suite

Pen test results: 48/48 passed, 0 findings (post-fix)
Test suite: 64/64 passed, 97.7% coverage

molty3000 added 2 commits May 13, 2026 20:08
BREAKING: DEFAULT_ERROR_HANDLER now only exposes error details in
NODE_ENV=development (opt-in). All other modes — production, staging,
testing, and unset NODE_ENV — return sanitized "Internal Server Error".

Previously, any mode except production leaked err.message to clients,
which could expose DB queries, file paths, or internal state.

Changes:
- lib/router/sequential.js: flip condition from === 'production' to
  === 'development', add Content-Type header
- tests/nested-routers.test.js: expect sanitized response in test mode
- tests/router-coverage.test.js: expect sanitized response in test mode
- tests/v4.4.test.js: add NODE_ENV-unset test
- tooling/pentest.js: comprehensive 48-vector security test suite

Pen test results: 48/48 passed, 0 findings (post-fix)
Test suite: 64/64 passed, 97.7% coverage
- Remove unused requires (http, url)
- Remove unused variables (checkPrototypePollution, timeout, nested→const)
- Fix trailing commas (standard style)
- Fix quotes (single quotes for strings)
- Fix dot notation (res.getHeader('server') not ['server'])
- Fix _body getter (captures mock response body correctly)
- Convert template literals to string concatenation for standard
@jkyberneees jkyberneees merged commit f7ad8bd into master May 14, 2026
5 checks passed
molty3000 pushed a commit that referenced this pull request May 14, 2026
BREAKING: DEFAULT_ERROR_HANDLER now safe-by-default.
Only NODE_ENV=development exposes error details.

See PR #51 for the security hardening fix.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant