@soulbatical/tetra-core 0.10.2 → 0.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/createApp.d.ts +2 -0
- package/dist/core/createApp.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/contentTypeGuard.d.ts +38 -0
- package/dist/middleware/contentTypeGuard.d.ts.map +1 -0
- package/dist/middleware/contentTypeGuard.js +55 -0
- package/dist/middleware/contentTypeGuard.js.map +1 -0
- package/dist/middleware/securityMiddleware.d.ts +12 -0
- package/dist/middleware/securityMiddleware.d.ts.map +1 -1
- package/dist/middleware/securityMiddleware.js +6 -0
- package/dist/middleware/securityMiddleware.js.map +1 -1
- package/dist/middleware/validateBody.d.ts +48 -1
- package/dist/middleware/validateBody.d.ts.map +1 -1
- package/dist/middleware/validateBody.js +115 -1
- package/dist/middleware/validateBody.js.map +1 -1
- package/package.json +1 -1
package/dist/core/createApp.d.ts
CHANGED
|
@@ -118,6 +118,8 @@ export declare function createApp(config: CreateAppConfig): {
|
|
|
118
118
|
strictRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
119
119
|
authRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
120
120
|
publicContentRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
121
|
+
writeRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
122
|
+
webhookRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
121
123
|
createRateLimiter: (windowMs?: number, max?: number) => import("express-rate-limit").RateLimitRequestHandler;
|
|
122
124
|
smartRateLimiter: (limiter: any) => (req: Request, res: Response, next: NextFunction) => any;
|
|
123
125
|
limitRequestSize: (req: Request, res: Response, next: NextFunction) => express.Response<any, Record<string, any>> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../src/core/createApp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../src/core/createApp.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -65,7 +65,9 @@ export { auditRoutes } from './middleware/routeAudit.js';
|
|
|
65
65
|
export type { RouteAuditOptions } from './middleware/routeAudit.js';
|
|
66
66
|
export { requireCronSecret } from './middleware/cronMiddleware.js';
|
|
67
67
|
export { requireInternalKey } from './middleware/internalKeyMiddleware.js';
|
|
68
|
-
export { validateBody } from './middleware/validateBody.js';
|
|
68
|
+
export { validateBody, sanitizePublicString, isValidEmail } from './middleware/validateBody.js';
|
|
69
|
+
export type { AllowlistConfig } from './middleware/validateBody.js';
|
|
70
|
+
export { requireJsonContentType } from './middleware/contentTypeGuard.js';
|
|
69
71
|
export { createLogger, rootLogger } from './utils/logger.js';
|
|
70
72
|
export type { Logger } from './utils/logger.js';
|
|
71
73
|
export { validateEnvironment, requireEnvVar } from './utils/validateEnvironment.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,8 @@ export { requireCronSecret } from './middleware/cronMiddleware.js';
|
|
|
60
60
|
// Internal Key Middleware (service-to-service auth with timing-safe comparison)
|
|
61
61
|
export { requireInternalKey } from './middleware/internalKeyMiddleware.js';
|
|
62
62
|
// Body Validation Middleware (Zod-compatible or allowlist-based)
|
|
63
|
-
export { validateBody } from './middleware/validateBody.js';
|
|
63
|
+
export { validateBody, sanitizePublicString, isValidEmail } from './middleware/validateBody.js';
|
|
64
|
+
export { requireJsonContentType } from './middleware/contentTypeGuard.js';
|
|
64
65
|
// ─── Utils ──────────────────────────────────────────────────
|
|
65
66
|
export { createLogger, rootLogger } from './utils/logger.js';
|
|
66
67
|
export { validateEnvironment, requireEnvVar } from './utils/validateEnvironment.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAMtE,+DAA+D;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAE9F,+DAA+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAE3G,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE,+DAA+D;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,gEAAgE;AAChE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,wBAAwB,EAAE,WAAW,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE9N,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAChJ,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,2CAA2C;AAC3C,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAG9K,mCAAmC;AACnC,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAGtP,8DAA8D;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,gFAAgF;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3E,iEAAiE;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-Type Guard Middleware
|
|
3
|
+
*
|
|
4
|
+
* Rejects requests with unexpected Content-Type headers on bodied methods
|
|
5
|
+
* (POST, PUT, PATCH). Prevents:
|
|
6
|
+
* - Log-flood / DoS via random content-types that still hit handlers
|
|
7
|
+
* (pentest finding #7 on vibecodingacademy.nl).
|
|
8
|
+
* - XXE probes that crash handlers (pentest #15).
|
|
9
|
+
* - Content-type split between signed-body and unsigned-body paths (#25).
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { requireJsonContentType } from '@soulbatical/tetra-core';
|
|
14
|
+
* router.post('/', requireJsonContentType(), handler);
|
|
15
|
+
*
|
|
16
|
+
* // Allow only form-url-encoded (for webhook providers that post forms):
|
|
17
|
+
* router.post('/webhook', requireJsonContentType({ allow: ['application/x-www-form-urlencoded'] }), handler);
|
|
18
|
+
*
|
|
19
|
+
* // Allow both JSON and form (e.g. Mollie webhooks):
|
|
20
|
+
* router.post('/webhook', requireJsonContentType({ allow: ['application/json', 'application/x-www-form-urlencoded'] }), handler);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { Request, Response, NextFunction } from 'express';
|
|
24
|
+
export interface ContentTypeGuardConfig {
|
|
25
|
+
/**
|
|
26
|
+
* Allowed content-type prefixes. Default: ['application/json'].
|
|
27
|
+
* Matching is case-insensitive and prefix-based (e.g. 'application/json'
|
|
28
|
+
* matches 'application/json; charset=utf-8').
|
|
29
|
+
*/
|
|
30
|
+
allow?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Methods the guard applies to. Default: ['POST', 'PUT', 'PATCH'].
|
|
33
|
+
* GET/HEAD/DELETE/OPTIONS never carry a meaningful body.
|
|
34
|
+
*/
|
|
35
|
+
methods?: string[];
|
|
36
|
+
}
|
|
37
|
+
export declare function requireJsonContentType(config?: ContentTypeGuardConfig): (req: Request, res: Response, next: NextFunction) => void;
|
|
38
|
+
//# sourceMappingURL=contentTypeGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentTypeGuard.d.ts","sourceRoot":"","sources":["../../src/middleware/contentTypeGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,sBAA2B,IAIhE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA8B/D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-Type Guard Middleware
|
|
3
|
+
*
|
|
4
|
+
* Rejects requests with unexpected Content-Type headers on bodied methods
|
|
5
|
+
* (POST, PUT, PATCH). Prevents:
|
|
6
|
+
* - Log-flood / DoS via random content-types that still hit handlers
|
|
7
|
+
* (pentest finding #7 on vibecodingacademy.nl).
|
|
8
|
+
* - XXE probes that crash handlers (pentest #15).
|
|
9
|
+
* - Content-type split between signed-body and unsigned-body paths (#25).
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { requireJsonContentType } from '@soulbatical/tetra-core';
|
|
14
|
+
* router.post('/', requireJsonContentType(), handler);
|
|
15
|
+
*
|
|
16
|
+
* // Allow only form-url-encoded (for webhook providers that post forms):
|
|
17
|
+
* router.post('/webhook', requireJsonContentType({ allow: ['application/x-www-form-urlencoded'] }), handler);
|
|
18
|
+
*
|
|
19
|
+
* // Allow both JSON and form (e.g. Mollie webhooks):
|
|
20
|
+
* router.post('/webhook', requireJsonContentType({ allow: ['application/json', 'application/x-www-form-urlencoded'] }), handler);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { RFC7807ErrorResponse } from '../shared/rfc7807ErrorResponse.js';
|
|
24
|
+
const DEFAULT_ALLOW = ['application/json'];
|
|
25
|
+
const DEFAULT_METHODS = ['POST', 'PUT', 'PATCH'];
|
|
26
|
+
export function requireJsonContentType(config = {}) {
|
|
27
|
+
const allowed = (config.allow || DEFAULT_ALLOW).map(s => s.toLowerCase());
|
|
28
|
+
const methods = new Set((config.methods || DEFAULT_METHODS).map(s => s.toUpperCase()));
|
|
29
|
+
return (req, res, next) => {
|
|
30
|
+
if (!methods.has(req.method.toUpperCase())) {
|
|
31
|
+
next();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Empty body with no content-type is allowed (browsers do this on PATCH
|
|
35
|
+
// with an empty payload). But if a content-type IS set, it must match.
|
|
36
|
+
const rawType = (req.headers['content-type'] || '').toLowerCase();
|
|
37
|
+
if (!rawType) {
|
|
38
|
+
// Only reject if there's actually a body.
|
|
39
|
+
const len = parseInt(req.headers['content-length'] || '0', 10);
|
|
40
|
+
if (len > 0) {
|
|
41
|
+
RFC7807ErrorResponse.send(res, 415, 'unsupported-media-type', 'Unsupported Media Type', 'Content-Type header is required');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
next();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const matches = allowed.some(prefix => rawType.startsWith(prefix));
|
|
48
|
+
if (!matches) {
|
|
49
|
+
RFC7807ErrorResponse.send(res, 415, 'unsupported-media-type', 'Unsupported Media Type', `Unsupported Content-Type. Allowed: ${allowed.join(', ')}`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
next();
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=contentTypeGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentTypeGuard.js","sourceRoot":"","sources":["../../src/middleware/contentTypeGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAiBzE,MAAM,aAAa,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC3C,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,UAAU,sBAAsB,CAAC,SAAiC,EAAE;IACxE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEvF,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3C,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,0CAA0C;YAC1C,MAAM,GAAG,GAAG,QAAQ,CAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAY,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3E,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACZ,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,wBAAwB,EAAE,wBAAwB,EACpF,iCAAiC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,wBAAwB,EAAE,wBAAwB,EACpF,sCAAsC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -34,6 +34,16 @@ export interface SecurityConfig {
|
|
|
34
34
|
strict?: number;
|
|
35
35
|
/** Auth routes (login, OAuth, signup). Default: 100 in prod, 1000 in dev. */
|
|
36
36
|
auth?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Public write endpoints (anonymous POST: contact, lead-events, tool-signups, course-applications, error-log).
|
|
39
|
+
* Must be strict to prevent DB spam + email flood. Default: 30 in prod, 1000 in dev.
|
|
40
|
+
*/
|
|
41
|
+
write?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Webhook endpoints (Stripe, Mollie, GitHub). Signature-based, but limit fallback for unsigned requests.
|
|
44
|
+
* Default: 300 in prod (expect real webhook traffic), 5000 in dev.
|
|
45
|
+
*/
|
|
46
|
+
webhook?: number;
|
|
37
47
|
};
|
|
38
48
|
/** Max request body size (default: '50mb') */
|
|
39
49
|
bodyLimit?: string;
|
|
@@ -60,6 +70,8 @@ export declare function configureSecurity(config?: SecurityConfig): {
|
|
|
60
70
|
strictRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
61
71
|
authRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
62
72
|
publicContentRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
73
|
+
writeRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
74
|
+
webhookRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
63
75
|
createRateLimiter: (windowMs?: number, max?: number) => import("express-rate-limit").RateLimitRequestHandler;
|
|
64
76
|
smartRateLimiter: (limiter: any) => (req: Request, res: Response, next: NextFunction) => any;
|
|
65
77
|
limitRequestSize: (req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"securityMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/securityMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,6EAA6E;QAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"securityMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/securityMiddleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,6EAA6E;QAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAOD,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,cAAmB;wBAIhC,OAAO,OAAO,QAAQ,QAAQ,YAAY;yGAqErD,CAAC;yBAHW,OAAO,OAAO,QAAQ,QAAQ,YAAY;;;;;;;mCA8B5B,MAAM,QAAwB,MAAM;gCAsD3C,GAAG,MAC5B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;4BAU1B,OAAO,OAAO,QAAQ,QAAQ,YAAY;yBAY7C,OAAO,OAAO,QAAQ,QAAQ,YAAY;EA8BvE;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -162,10 +162,14 @@ export function configureSecurity(config = {}) {
|
|
|
162
162
|
const generalMax = config.rateLimits?.general ?? (process.env.NODE_ENV === 'production' ? 1000 : 50000);
|
|
163
163
|
const strictMax = config.rateLimits?.strict ?? (process.env.NODE_ENV === 'production' ? 20 : 100);
|
|
164
164
|
const authMax = config.rateLimits?.auth ?? (process.env.NODE_ENV === 'production' ? 100 : 1000);
|
|
165
|
+
const writeMax = config.rateLimits?.write ?? (process.env.NODE_ENV === 'production' ? 30 : 1000);
|
|
166
|
+
const webhookMax = config.rateLimits?.webhook ?? (process.env.NODE_ENV === 'production' ? 300 : 5000);
|
|
165
167
|
const generalRateLimiter = createTetraRateLimiter(15 * 60 * 1000, generalMax);
|
|
166
168
|
const strictRateLimiter = createTetraRateLimiter(15 * 60 * 1000, strictMax);
|
|
167
169
|
const authRateLimiter = createTetraRateLimiter(15 * 60 * 1000, authMax);
|
|
168
170
|
const publicContentRateLimiter = createTetraRateLimiter(15 * 60 * 1000, process.env.NODE_ENV === 'production' ? 5000 : 10000);
|
|
171
|
+
const writeRateLimiter = createTetraRateLimiter(15 * 60 * 1000, writeMax);
|
|
172
|
+
const webhookRateLimiter = createTetraRateLimiter(15 * 60 * 1000, webhookMax);
|
|
169
173
|
// Smart rate limiter: apply AFTER auth so superadmin bypass works
|
|
170
174
|
const smartRateLimiter = (limiter) => {
|
|
171
175
|
return (req, res, next) => {
|
|
@@ -211,6 +215,8 @@ export function configureSecurity(config = {}) {
|
|
|
211
215
|
strictRateLimiter,
|
|
212
216
|
authRateLimiter,
|
|
213
217
|
publicContentRateLimiter,
|
|
218
|
+
writeRateLimiter,
|
|
219
|
+
webhookRateLimiter,
|
|
214
220
|
createRateLimiter: createTetraRateLimiter,
|
|
215
221
|
smartRateLimiter,
|
|
216
222
|
limitRequestSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"securityMiddleware.js","sourceRoot":"","sources":["../../src/middleware/securityMiddleware.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"securityMiddleware.js","sourceRoot":"","sources":["../../src/middleware/securityMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,14 +18,51 @@
|
|
|
18
18
|
*
|
|
19
19
|
* // With required fields:
|
|
20
20
|
* router.post('/users', validateBody({ require: ['email'], allow: ['email', 'name'] }), handler);
|
|
21
|
+
*
|
|
22
|
+
* // With email format validation, HTML-strip sanitation, enum whitelist and metadata guard:
|
|
23
|
+
* router.post('/tool-signups', validateBody({
|
|
24
|
+
* require: ['name', 'email'],
|
|
25
|
+
* allow: ['name', 'email', 'source', 'metadata'],
|
|
26
|
+
* email: ['email'],
|
|
27
|
+
* sanitize: ['name'], // HTML-strip + CRLF-strip + trim
|
|
28
|
+
* maxLength: { name: 100, email: 254 },
|
|
29
|
+
* enum: { source: ['landing', 'homepage'] },
|
|
30
|
+
* metadataKeys: { // nested object whitelist + byte cap
|
|
31
|
+
* metadata: { allow: ['utm_source', 'utm_campaign'], maxBytes: 4096 },
|
|
32
|
+
* },
|
|
33
|
+
* }), handler);
|
|
21
34
|
* ```
|
|
22
35
|
*/
|
|
23
36
|
import { Request, Response, NextFunction } from 'express';
|
|
24
|
-
interface
|
|
37
|
+
interface MetadataKeysConfig {
|
|
38
|
+
/** Allowed keys in the nested object. Unknown keys → field is rejected. */
|
|
39
|
+
allow: string[];
|
|
40
|
+
/** Max byte length of the JSON-serialized nested object. */
|
|
41
|
+
maxBytes?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface AllowlistConfig {
|
|
25
44
|
/** Fields allowed in the request body. Unknown fields are stripped. */
|
|
26
45
|
allow: string[];
|
|
27
46
|
/** Fields that must be present (subset of allow). */
|
|
28
47
|
require?: string[];
|
|
48
|
+
/** Fields that must be valid RFC-5322-ish email addresses. */
|
|
49
|
+
email?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Fields whose string values are sanitized: HTML stripped, CRLF stripped, trimmed.
|
|
52
|
+
* Pass `true` to sanitize every string-valued field in `allow`.
|
|
53
|
+
* Non-string values pass through untouched.
|
|
54
|
+
*/
|
|
55
|
+
sanitize?: string[] | boolean;
|
|
56
|
+
/** Per-field maximum string length (checked after sanitize, before passing on). */
|
|
57
|
+
maxLength?: Record<string, number>;
|
|
58
|
+
/** Per-field enum whitelist. Values outside the list → 400. */
|
|
59
|
+
enum?: Record<string, readonly string[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Per-field nested-object whitelist. The field must be a plain object
|
|
62
|
+
* (not array, not primitive). Unknown keys cause rejection. A byte cap
|
|
63
|
+
* prevents stuffing large payloads.
|
|
64
|
+
*/
|
|
65
|
+
metadataKeys?: Record<string, MetadataKeysConfig>;
|
|
29
66
|
}
|
|
30
67
|
interface ZodLikeSchema {
|
|
31
68
|
safeParse(data: unknown): {
|
|
@@ -40,6 +77,16 @@ interface ZodLikeSchema {
|
|
|
40
77
|
};
|
|
41
78
|
}
|
|
42
79
|
type ValidateBodyConfig = AllowlistConfig | ZodLikeSchema;
|
|
80
|
+
/**
|
|
81
|
+
* Strip HTML tags, inline JS handlers, javascript: URIs, and CRLF sequences.
|
|
82
|
+
* Safe default for public-form string fields (names, subjects, messages).
|
|
83
|
+
*
|
|
84
|
+
* Keeps normal Latin characters, punctuation, newlines-within-text (converted
|
|
85
|
+
* to space) so the sanitized output remains useful as human-readable content.
|
|
86
|
+
*/
|
|
87
|
+
export declare function sanitizePublicString(value: string): string;
|
|
88
|
+
/** Validate against RFC-5322-ish email format. */
|
|
89
|
+
export declare function isValidEmail(value: unknown): value is string;
|
|
43
90
|
/**
|
|
44
91
|
* Middleware factory for request body validation.
|
|
45
92
|
* Accepts either a Zod-like schema or an allowlist config.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBody.d.ts","sourceRoot":"","sources":["../../src/middleware/validateBody.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validateBody.d.ts","sourceRoot":"","sources":["../../src/middleware/validateBody.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS1D,UAAU,kBAAkB;IAC1B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE9B,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAEzC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACnD;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;CAC5I;AAED,KAAK,kBAAkB,GAAG,eAAe,GAAG,aAAa,CAAC;AAM1D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,IAC7C,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA6H/D"}
|
|
@@ -18,12 +18,50 @@
|
|
|
18
18
|
*
|
|
19
19
|
* // With required fields:
|
|
20
20
|
* router.post('/users', validateBody({ require: ['email'], allow: ['email', 'name'] }), handler);
|
|
21
|
+
*
|
|
22
|
+
* // With email format validation, HTML-strip sanitation, enum whitelist and metadata guard:
|
|
23
|
+
* router.post('/tool-signups', validateBody({
|
|
24
|
+
* require: ['name', 'email'],
|
|
25
|
+
* allow: ['name', 'email', 'source', 'metadata'],
|
|
26
|
+
* email: ['email'],
|
|
27
|
+
* sanitize: ['name'], // HTML-strip + CRLF-strip + trim
|
|
28
|
+
* maxLength: { name: 100, email: 254 },
|
|
29
|
+
* enum: { source: ['landing', 'homepage'] },
|
|
30
|
+
* metadataKeys: { // nested object whitelist + byte cap
|
|
31
|
+
* metadata: { allow: ['utm_source', 'utm_campaign'], maxBytes: 4096 },
|
|
32
|
+
* },
|
|
33
|
+
* }), handler);
|
|
21
34
|
* ```
|
|
22
35
|
*/
|
|
23
36
|
import { RFC7807ErrorResponse } from '../shared/rfc7807ErrorResponse.js';
|
|
37
|
+
/**
|
|
38
|
+
* RFC 5322 email regex (pragmatic — not the 6000-char full spec).
|
|
39
|
+
* Matches what every mail server in practice accepts.
|
|
40
|
+
*/
|
|
41
|
+
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
24
42
|
function isZodLike(config) {
|
|
25
43
|
return typeof config.safeParse === 'function';
|
|
26
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Strip HTML tags, inline JS handlers, javascript: URIs, and CRLF sequences.
|
|
47
|
+
* Safe default for public-form string fields (names, subjects, messages).
|
|
48
|
+
*
|
|
49
|
+
* Keeps normal Latin characters, punctuation, newlines-within-text (converted
|
|
50
|
+
* to space) so the sanitized output remains useful as human-readable content.
|
|
51
|
+
*/
|
|
52
|
+
export function sanitizePublicString(value) {
|
|
53
|
+
return value
|
|
54
|
+
.replace(/<[^>]*>/g, '') // strip ALL HTML tags
|
|
55
|
+
.replace(/javascript:/gi, '')
|
|
56
|
+
.replace(/on\w+\s*=\s*["'][^"']*["']/gi, '') // onerror="..."
|
|
57
|
+
.replace(/on\w+\s*=\s*[^\s>]+/gi, '') // onerror=foo()
|
|
58
|
+
.replace(/[\r\n]+/g, ' ') // CRLF → space (prevents SMTP header injection)
|
|
59
|
+
.trim();
|
|
60
|
+
}
|
|
61
|
+
/** Validate against RFC-5322-ish email format. */
|
|
62
|
+
export function isValidEmail(value) {
|
|
63
|
+
return typeof value === 'string' && value.length <= 254 && EMAIL_REGEX.test(value);
|
|
64
|
+
}
|
|
27
65
|
/**
|
|
28
66
|
* Middleware factory for request body validation.
|
|
29
67
|
* Accepts either a Zod-like schema or an allowlist config.
|
|
@@ -57,7 +95,7 @@ export function validateBody(config) {
|
|
|
57
95
|
return;
|
|
58
96
|
}
|
|
59
97
|
}
|
|
60
|
-
// Strip unknown fields
|
|
98
|
+
// Strip unknown fields (mass-assignment guard)
|
|
61
99
|
const allowSet = new Set(allow);
|
|
62
100
|
const cleaned = {};
|
|
63
101
|
for (const key of Object.keys(req.body)) {
|
|
@@ -65,6 +103,82 @@ export function validateBody(config) {
|
|
|
65
103
|
cleaned[key] = req.body[key];
|
|
66
104
|
}
|
|
67
105
|
}
|
|
106
|
+
// Sanitize string fields (HTML + CRLF strip)
|
|
107
|
+
const sanitizeAll = config.sanitize === true;
|
|
108
|
+
const sanitizeFields = Array.isArray(config.sanitize) ? new Set(config.sanitize) : null;
|
|
109
|
+
if (sanitizeAll || sanitizeFields) {
|
|
110
|
+
for (const key of Object.keys(cleaned)) {
|
|
111
|
+
const value = cleaned[key];
|
|
112
|
+
if (typeof value !== 'string')
|
|
113
|
+
continue;
|
|
114
|
+
if (sanitizeAll || sanitizeFields?.has(key)) {
|
|
115
|
+
cleaned[key] = sanitizePublicString(value);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Email format validation
|
|
120
|
+
if (config.email) {
|
|
121
|
+
for (const field of config.email) {
|
|
122
|
+
const value = cleaned[field];
|
|
123
|
+
// Only validate if field is present — allows optional email fields.
|
|
124
|
+
if (value === undefined || value === null || value === '')
|
|
125
|
+
continue;
|
|
126
|
+
if (!isValidEmail(value)) {
|
|
127
|
+
RFC7807ErrorResponse.badRequest(res, `Invalid ${field} format`, { field });
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Max length (applied post-sanitize, non-destructive: reject instead of truncate,
|
|
133
|
+
// so API contract is explicit).
|
|
134
|
+
if (config.maxLength) {
|
|
135
|
+
for (const [field, max] of Object.entries(config.maxLength)) {
|
|
136
|
+
const value = cleaned[field];
|
|
137
|
+
if (typeof value === 'string' && value.length > max) {
|
|
138
|
+
RFC7807ErrorResponse.badRequest(res, `Field ${field} exceeds max length (${max})`, { field, max });
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Enum whitelist
|
|
144
|
+
if (config.enum) {
|
|
145
|
+
for (const [field, allowedValues] of Object.entries(config.enum)) {
|
|
146
|
+
const value = cleaned[field];
|
|
147
|
+
if (value === undefined || value === null)
|
|
148
|
+
continue; // optional
|
|
149
|
+
if (typeof value !== 'string' || !allowedValues.includes(value)) {
|
|
150
|
+
RFC7807ErrorResponse.badRequest(res, `Invalid ${field} value`, { field, allowed: allowedValues });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Nested-object metadata whitelist
|
|
156
|
+
if (config.metadataKeys) {
|
|
157
|
+
for (const [field, metaConfig] of Object.entries(config.metadataKeys)) {
|
|
158
|
+
const value = cleaned[field];
|
|
159
|
+
if (value === undefined || value === null)
|
|
160
|
+
continue;
|
|
161
|
+
if (typeof value !== 'object' || Array.isArray(value)) {
|
|
162
|
+
RFC7807ErrorResponse.badRequest(res, `Field ${field} must be a plain object`, { field });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const metaAllow = new Set(metaConfig.allow);
|
|
166
|
+
const filtered = {};
|
|
167
|
+
for (const [k, v] of Object.entries(value)) {
|
|
168
|
+
if (metaAllow.has(k)) {
|
|
169
|
+
filtered[k] = v;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (metaConfig.maxBytes !== undefined) {
|
|
173
|
+
const serialized = JSON.stringify(filtered);
|
|
174
|
+
if (serialized.length > metaConfig.maxBytes) {
|
|
175
|
+
RFC7807ErrorResponse.badRequest(res, `Field ${field} exceeds max bytes`, { field, maxBytes: metaConfig.maxBytes });
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
cleaned[field] = filtered;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
68
182
|
req.body = cleaned;
|
|
69
183
|
next();
|
|
70
184
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBody.js","sourceRoot":"","sources":["../../src/middleware/validateBody.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validateBody.js","sourceRoot":"","sources":["../../src/middleware/validateBody.ts"],"names":[],"mappings":"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"}
|