xypriss 3.2.1 → 3.2.2
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/cjs/src/middleware/built-in/BuiltInMiddleware.js +51 -8
- package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js.map +1 -1
- package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js +51 -8
- package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/mods/security/src/core/crypt.js +0 -56
- package/dist/cjs/mods/security/src/core/crypt.js.map +0 -1
- package/dist/cjs/src/middleware/built-in/index.js +0 -325
- package/dist/cjs/src/middleware/built-in/index.js.map +0 -1
- package/dist/cjs/src/middleware/built-in/sqlInjection.js +0 -335
- package/dist/cjs/src/middleware/built-in/sqlInjection.js.map +0 -1
- package/dist/cjs/src/server/conf/rateLimitConfig.js +0 -35
- package/dist/cjs/src/server/conf/rateLimitConfig.js.map +0 -1
- package/dist/cjs/src/server/utils/wildcardMatcher.js +0 -92
- package/dist/cjs/src/server/utils/wildcardMatcher.js.map +0 -1
- package/dist/esm/mods/security/src/core/crypt.js +0 -54
- package/dist/esm/mods/security/src/core/crypt.js.map +0 -1
- package/dist/esm/src/middleware/built-in/index.js +0 -323
- package/dist/esm/src/middleware/built-in/index.js.map +0 -1
- package/dist/esm/src/middleware/built-in/sqlInjection.js +0 -333
- package/dist/esm/src/middleware/built-in/sqlInjection.js.map +0 -1
- package/dist/esm/src/server/conf/rateLimitConfig.js +0 -33
- package/dist/esm/src/server/conf/rateLimitConfig.js.map +0 -1
- package/dist/esm/src/server/utils/wildcardMatcher.js +0 -88
- package/dist/esm/src/server/utils/wildcardMatcher.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlInjection.js","sources":["../../../../../src/middleware/built-in/sqlInjection.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const rateLimitConfig = (cf) => {
|
|
4
|
-
return {
|
|
5
|
-
enabled: cf?.rateLimit?.enabled ?? true,
|
|
6
|
-
strategy: cf?.rateLimit?.strategy ?? "sliding-window",
|
|
7
|
-
global: {
|
|
8
|
-
requests: cf?.rateLimit?.global?.requests ?? 1000,
|
|
9
|
-
window: cf?.rateLimit?.global?.window ?? "1h",
|
|
10
|
-
},
|
|
11
|
-
perIP: {
|
|
12
|
-
requests: cf?.rateLimit?.perIP?.requests ?? 100,
|
|
13
|
-
window: cf?.rateLimit?.perIP?.window ?? "1m",
|
|
14
|
-
},
|
|
15
|
-
perUser: cf?.rateLimit?.perUser
|
|
16
|
-
? {
|
|
17
|
-
requests: cf?.rateLimit.perUser.requests ?? 50,
|
|
18
|
-
window: cf?.rateLimit.perUser.window ?? "1m",
|
|
19
|
-
}
|
|
20
|
-
: undefined,
|
|
21
|
-
headers: cf?.rateLimit?.headers,
|
|
22
|
-
redis: cf?.rateLimit?.redis
|
|
23
|
-
? {
|
|
24
|
-
host: cf?.rateLimit.redis.host ?? "localhost",
|
|
25
|
-
port: cf?.rateLimit.redis.port ?? 6379,
|
|
26
|
-
password: cf?.rateLimit.redis.password,
|
|
27
|
-
db: cf?.rateLimit.redis.db ?? 0,
|
|
28
|
-
keyPrefix: cf?.rateLimit.redis.keyPrefix ?? "xypriss:ratelimit:",
|
|
29
|
-
}
|
|
30
|
-
: undefined,
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
exports.rateLimitConfig = rateLimitConfig;
|
|
35
|
-
//# sourceMappingURL=rateLimitConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimitConfig.js","sources":["../../../../../src/server/conf/rateLimitConfig.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEa,MAAA,eAAe,GAAG,CAAC,EAA4B,KAAI;IAC5D,OAAO;AACH,QAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,IAAI,IAAI;AACvC,QAAA,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,IAAI,gBAAgB;AACrD,QAAA,MAAM,EAAE;YACJ,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI;YACjD,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;AAChD,SAAA;AACD,QAAA,KAAK,EAAE;YACH,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAI,GAAG;YAC/C,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI;AAC/C,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO;AAC3B,cAAE;gBACI,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAC9C,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI;AAC/C,aAAA;AACH,cAAE,SAAS;AACf,QAAA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO;AAC/B,QAAA,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK;AACvB,cAAE;gBACI,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW;gBAC7C,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI;AACtC,gBAAA,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ;gBACtC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;gBAC/B,SAAS,EACL,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,oBAAoB;AAC5D,aAAA;AACH,cAAE,SAAS;KAClB,CAAC;AACN;;;;"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Wildcard pattern matching utility for CORS origins
|
|
5
|
-
*
|
|
6
|
-
* Supports patterns like:
|
|
7
|
-
* - "localhost:*" matches "localhost:3000", "localhost:8080", etc.
|
|
8
|
-
* - "*.example.com" matches "api.example.com", "app.example.com", etc.
|
|
9
|
-
* - "127.0.0.1:*" matches "127.0.0.1:3000", "127.0.0.1:8080", etc.
|
|
10
|
-
* - "::1:*" matches "::1:3000", "::1:8080", etc.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Converts a wildcard pattern to a regular expression
|
|
14
|
-
* @param pattern - The wildcard pattern (e.g., "localhost:*", "*.example.com")
|
|
15
|
-
* @returns RegExp object for matching
|
|
16
|
-
*/
|
|
17
|
-
function patternToRegex(pattern) {
|
|
18
|
-
// Escape special regex characters except for *
|
|
19
|
-
const escaped = pattern
|
|
20
|
-
.replace(/[.+?^${}()|[\]\\]/g, '\\$&') // Escape special chars
|
|
21
|
-
.replace(/\*/g, '.*'); // Replace * with .*
|
|
22
|
-
// Ensure exact match with ^ and $
|
|
23
|
-
return new RegExp(`^${escaped}$`, 'i'); // Case insensitive
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Checks if an origin matches a wildcard pattern
|
|
27
|
-
* @param origin - The origin to check (e.g., "http://localhost:3000")
|
|
28
|
-
* @param pattern - The wildcard pattern (e.g., "localhost:*")
|
|
29
|
-
* @returns true if the origin matches the pattern
|
|
30
|
-
*/
|
|
31
|
-
function matchesWildcardPattern(origin, pattern) {
|
|
32
|
-
// Handle exact matches first (no wildcards)
|
|
33
|
-
if (!pattern.includes('*')) {
|
|
34
|
-
return origin === pattern || origin.includes(pattern);
|
|
35
|
-
}
|
|
36
|
-
// Extract the host:port part from the origin URL
|
|
37
|
-
let originHost;
|
|
38
|
-
try {
|
|
39
|
-
const url = new URL(origin);
|
|
40
|
-
originHost = url.host; // This includes both hostname and port
|
|
41
|
-
// Special handling for default ports
|
|
42
|
-
if (url.protocol === 'https:' && url.port === '' && url.hostname === 'localhost') {
|
|
43
|
-
originHost = 'localhost:443';
|
|
44
|
-
}
|
|
45
|
-
else if (url.protocol === 'http:' && url.port === '' && url.hostname === 'localhost') {
|
|
46
|
-
originHost = 'localhost:80';
|
|
47
|
-
}
|
|
48
|
-
// Handle IPv6 addresses - remove brackets for pattern matching
|
|
49
|
-
if (url.hostname.startsWith('[') && url.hostname.endsWith(']')) {
|
|
50
|
-
const ipv6Host = url.hostname.slice(1, -1); // Remove brackets
|
|
51
|
-
originHost = url.port ? `${ipv6Host}:${url.port}` : ipv6Host;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// If it's not a valid URL, treat it as a host:port string
|
|
56
|
-
originHost = origin;
|
|
57
|
-
}
|
|
58
|
-
const regex = patternToRegex(pattern);
|
|
59
|
-
return regex.test(originHost);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Checks if an origin is allowed based on an array of patterns
|
|
63
|
-
* @param origin - The origin to check
|
|
64
|
-
* @param allowedOrigins - Array of allowed origins (can include wildcards)
|
|
65
|
-
* @returns true if the origin is allowed
|
|
66
|
-
*/
|
|
67
|
-
function isOriginAllowed(origin, allowedOrigins) {
|
|
68
|
-
if (!origin || !allowedOrigins || allowedOrigins.length === 0) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
return allowedOrigins.some(pattern => matchesWildcardPattern(origin, pattern));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Creates a CORS origin function that supports wildcard patterns
|
|
75
|
-
* @param allowedOrigins - Array of allowed origins (can include wildcards)
|
|
76
|
-
* @returns Function compatible with cors middleware
|
|
77
|
-
*/
|
|
78
|
-
function createWildcardOriginFunction(allowedOrigins) {
|
|
79
|
-
return (origin, callback) => {
|
|
80
|
-
// Allow requests with no origin (like mobile apps or curl requests)
|
|
81
|
-
if (!origin) {
|
|
82
|
-
return callback(null, true);
|
|
83
|
-
}
|
|
84
|
-
const allowed = isOriginAllowed(origin, allowedOrigins);
|
|
85
|
-
callback(null, allowed);
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
exports.createWildcardOriginFunction = createWildcardOriginFunction;
|
|
90
|
-
exports.isOriginAllowed = isOriginAllowed;
|
|
91
|
-
exports.matchesWildcardPattern = matchesWildcardPattern;
|
|
92
|
-
//# sourceMappingURL=wildcardMatcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wildcardMatcher.js","sources":["../../../../../src/server/utils/wildcardMatcher.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;;;;;;AAQG;AAEH;;;;AAIG;AACH,SAAS,cAAc,CAAC,OAAe,EAAA;;IAEnC,MAAM,OAAO,GAAG,OAAO;AAClB,SAAA,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;AACrC,SAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;;IAG1B,OAAO,IAAI,MAAM,CAAC,CAAI,CAAA,EAAA,OAAO,CAAG,CAAA,CAAA,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;AAKG;AACa,SAAA,sBAAsB,CAAC,MAAc,EAAE,OAAe,EAAA;;IAElE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACxB,OAAO,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACzD;;AAGD,IAAA,IAAI,UAAkB,CAAC;AACvB,IAAA,IAAI;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC;;AAGtB,QAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE;YAC9E,UAAU,GAAG,eAAe,CAAC;SAChC;AAAM,aAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE;YACpF,UAAU,GAAG,cAAc,CAAC;SAC/B;;AAGD,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,GAAG,CAAC,IAAI,CAAA,CAAE,GAAG,QAAQ,CAAC;SAChE;KACJ;AAAC,IAAA,MAAM;;QAEJ,UAAU,GAAG,MAAM,CAAC;KACvB;AAED,IAAA,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AACtC,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;;;AAKG;AACa,SAAA,eAAe,CAAC,MAAc,EAAE,cAAwB,EAAA;AACpE,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3D,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,CAAC;AAED;;;;AAIG;AACG,SAAU,4BAA4B,CAAC,cAAwB,EAAA;AACjE,IAAA,OAAO,CAAC,MAA0B,EAAE,QAAsD,KAAI;;QAE1F,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/B;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACxD,QAAA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,KAAC,CAAC;AACN;;;;;;"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { Hash } from './hash/hash-core.js';
|
|
2
|
-
import './hash/hash-types.js';
|
|
3
|
-
import 'crypto';
|
|
4
|
-
import './hash/hash-security.js';
|
|
5
|
-
import './hash/hash-advanced.js';
|
|
6
|
-
import '../algorithms/hash-algorithms.js';
|
|
7
|
-
import { XyPrissSecurity } from './crypto.js';
|
|
8
|
-
import { SecureRandom } from './random/random-core.js';
|
|
9
|
-
import './random/random-types.js';
|
|
10
|
-
import './random/random-sources.js';
|
|
11
|
-
import 'nehonix-uri-processor';
|
|
12
|
-
import '../utils/memory/index.js';
|
|
13
|
-
import '../types.js';
|
|
14
|
-
|
|
15
|
-
class Cryptog {
|
|
16
|
-
constructor() {
|
|
17
|
-
this.hash = Hash;
|
|
18
|
-
this.crypto = XyPrissSecurity;
|
|
19
|
-
this.random = SecureRandom.getInstance();
|
|
20
|
-
}
|
|
21
|
-
static getInstance() {
|
|
22
|
-
if (!Cryptog.instance) {
|
|
23
|
-
Cryptog.instance = new Cryptog();
|
|
24
|
-
}
|
|
25
|
-
return Cryptog.instance;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* ### Cryptographic Core
|
|
30
|
-
*
|
|
31
|
-
* Primary cryptographic classes and utilities for secure random generation,
|
|
32
|
-
* key management, validation, and buffer operations.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* import { Cipher } from "xypriss-security";
|
|
37
|
-
*
|
|
38
|
-
* // Generate secure random bytes
|
|
39
|
-
* const randomBytes = Cipher.random.getRandomBytes(32);
|
|
40
|
-
*
|
|
41
|
-
* // Generate secure UUID
|
|
42
|
-
* const uuid = Cipher.random.generateSecureUUID();
|
|
43
|
-
*
|
|
44
|
-
* // Generate random integers
|
|
45
|
-
* const randomInt = Cipher.random.getSecureRandomInt(1, 100);
|
|
46
|
-
* ```
|
|
47
|
-
* @author Seth Eleazar <https://github.com/iDevo-ll>
|
|
48
|
-
* @version 1.1.6
|
|
49
|
-
* @license MIT
|
|
50
|
-
* @see {@link https://lab.nehonix.space/nehonix_viewer/_doc/Nehonix%20XyPrissSecurity} Official Documentation
|
|
51
|
-
*
|
|
52
|
-
*/
|
|
53
|
-
Cryptog.getInstance();
|
|
54
|
-
//# sourceMappingURL=crypt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypt.js","sources":["../../../../../../mods/security/src/core/crypt.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,MAAM,OAAO,CAAA;AAOT,IAAA,WAAA,GAAA;QANgB,IAAI,CAAA,IAAA,GAAgB,IAAI,CAAC;QACzB,IAAM,CAAA,MAAA,GAA2B,eAAe,CAAC;AACjD,QAAA,IAAA,CAAA,MAAM,GAAiB,YAAY,CAAC,WAAW,EAAE,CAAC;KAI1C;AAEjB,IAAA,OAAO,WAAW,GAAA;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnB,YAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;SACpC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAC;KAC3B;AACJ,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACmB,OAAO,CAAC,WAAW"}
|
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
import helmet from 'helmet';
|
|
2
|
-
import cors from 'cors';
|
|
3
|
-
import rateLimit from 'express-rate-limit';
|
|
4
|
-
import compression from 'compression';
|
|
5
|
-
import hpp from 'hpp';
|
|
6
|
-
import mongoSanitize from 'express-mongo-sanitize';
|
|
7
|
-
import xss from 'xss';
|
|
8
|
-
import morgan from 'morgan';
|
|
9
|
-
import slowDown from 'express-slow-down';
|
|
10
|
-
import ExpressBrute from 'express-brute';
|
|
11
|
-
import multer from 'multer';
|
|
12
|
-
import { doubleCsrf } from 'csrf-csrf';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* XyPriss Built-in Middleware
|
|
16
|
-
* Wrappers around popular middleware libraries
|
|
17
|
-
*/
|
|
18
|
-
class BuiltInMiddleware {
|
|
19
|
-
/**
|
|
20
|
-
* Get Helmet middleware for security headers
|
|
21
|
-
*/
|
|
22
|
-
static helmet(options = {}) {
|
|
23
|
-
const defaultOptions = {
|
|
24
|
-
contentSecurityPolicy: {
|
|
25
|
-
directives: {
|
|
26
|
-
defaultSrc: ["'self'"],
|
|
27
|
-
scriptSrc: ["'self'"],
|
|
28
|
-
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
29
|
-
imgSrc: ["'self'", "data:"],
|
|
30
|
-
fontSrc: ["'self'"],
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
crossOriginEmbedderPolicy: true,
|
|
34
|
-
crossOriginOpenerPolicy: true,
|
|
35
|
-
crossOriginResourcePolicy: { policy: "same-origin" },
|
|
36
|
-
dnsPrefetchControl: { allow: false },
|
|
37
|
-
frameguard: { action: "deny" },
|
|
38
|
-
hidePoweredBy: true,
|
|
39
|
-
hsts: {
|
|
40
|
-
maxAge: 31536000,
|
|
41
|
-
includeSubDomains: true,
|
|
42
|
-
preload: false,
|
|
43
|
-
},
|
|
44
|
-
ieNoOpen: true,
|
|
45
|
-
noSniff: true,
|
|
46
|
-
originAgentCluster: true,
|
|
47
|
-
permittedCrossDomainPolicies: false,
|
|
48
|
-
referrerPolicy: { policy: "strict-origin-when-cross-origin" },
|
|
49
|
-
xssFilter: true,
|
|
50
|
-
};
|
|
51
|
-
const config = { ...defaultOptions, ...options };
|
|
52
|
-
return helmet(config);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Get CORS middleware
|
|
56
|
-
*/
|
|
57
|
-
static cors(options = {}) {
|
|
58
|
-
const defaultOptions = {
|
|
59
|
-
origin: true,
|
|
60
|
-
methods: ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE"],
|
|
61
|
-
allowedHeaders: [
|
|
62
|
-
"Content-Type",
|
|
63
|
-
"Authorization",
|
|
64
|
-
"X-Requested-With",
|
|
65
|
-
],
|
|
66
|
-
credentials: false,
|
|
67
|
-
maxAge: 86400, // 24 hours
|
|
68
|
-
};
|
|
69
|
-
const config = { ...defaultOptions, ...options };
|
|
70
|
-
return cors(config);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get Rate Limiting middleware
|
|
74
|
-
*/
|
|
75
|
-
static rateLimit(options = {}) {
|
|
76
|
-
const defaultOptions = {
|
|
77
|
-
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
78
|
-
max: 100, // limit each IP to 100 requests per windowMs
|
|
79
|
-
message: {
|
|
80
|
-
error: "Too many requests from this IP, please try again later.",
|
|
81
|
-
retryAfter: "Please try again later.",
|
|
82
|
-
},
|
|
83
|
-
standardHeaders: true,
|
|
84
|
-
legacyHeaders: false,
|
|
85
|
-
handler: (_req, res) => {
|
|
86
|
-
res.status(429).json({
|
|
87
|
-
error: "Too many requests",
|
|
88
|
-
message: "Rate limit exceeded. Please try again later.",
|
|
89
|
-
retryAfter: Math.ceil(options.windowMs / 1000) || 900,
|
|
90
|
-
});
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
const config = { ...defaultOptions, ...options };
|
|
94
|
-
return rateLimit(config);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Get Compression middleware
|
|
98
|
-
*/
|
|
99
|
-
static compression(options = {}) {
|
|
100
|
-
const defaultOptions = {
|
|
101
|
-
level: 6,
|
|
102
|
-
threshold: 1024, // Only compress responses >= 1KB
|
|
103
|
-
filter: (req, res) => {
|
|
104
|
-
// Don't compress responses with this request header
|
|
105
|
-
if (req.headers["x-no-compression"]) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
// Fallback to standard filter function
|
|
109
|
-
return compression.filter(req, res);
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
const config = { ...defaultOptions, ...options };
|
|
113
|
-
return compression(config);
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* CSRF protection middleware using csrf-csrf library
|
|
117
|
-
*/
|
|
118
|
-
static csrf(options = {}) {
|
|
119
|
-
const defaultOptions = {
|
|
120
|
-
getSecret: () => "your-secret-key", // In production, use a proper secret
|
|
121
|
-
cookieName: "__Host-psifi.x-csrf-token",
|
|
122
|
-
cookieOptions: {
|
|
123
|
-
httpOnly: true,
|
|
124
|
-
sameSite: "strict",
|
|
125
|
-
secure: process.env.NODE_ENV === "production",
|
|
126
|
-
maxAge: 3600000, // 1 hour
|
|
127
|
-
},
|
|
128
|
-
size: 64,
|
|
129
|
-
ignoredMethods: ["GET", "HEAD", "OPTIONS"],
|
|
130
|
-
getTokenFromRequest: (req) => {
|
|
131
|
-
return (req.headers["x-csrf-token"] ||
|
|
132
|
-
req.body?._csrf ||
|
|
133
|
-
req.query?._csrf);
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
const config = { ...defaultOptions, ...options };
|
|
137
|
-
const { doubleCsrfProtection } = doubleCsrf(config);
|
|
138
|
-
// Return the protection middleware
|
|
139
|
-
return doubleCsrfProtection;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Get Express Validator middleware for input validation
|
|
143
|
-
* Simplified implementation - users should install express-validator separately
|
|
144
|
-
*/
|
|
145
|
-
static validator(options = {}) {
|
|
146
|
-
const defaultOptions = {
|
|
147
|
-
sanitizeBody: true,
|
|
148
|
-
checkBody: true,
|
|
149
|
-
checkQuery: true,
|
|
150
|
-
checkParams: true,
|
|
151
|
-
};
|
|
152
|
-
({ ...defaultOptions, ...options });
|
|
153
|
-
return (req, res, next) => {
|
|
154
|
-
// Basic validation middleware - simplified
|
|
155
|
-
// In production, use express-validator library directly
|
|
156
|
-
console.log("[Validator] Basic validation middleware active");
|
|
157
|
-
// Add basic validation helpers to request
|
|
158
|
-
req.validation = {
|
|
159
|
-
body: (field) => req.body?.[field],
|
|
160
|
-
query: (field) => req.query?.[field],
|
|
161
|
-
params: (field) => req.params?.[field],
|
|
162
|
-
};
|
|
163
|
-
next();
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Get HPP (HTTP Parameter Pollution) protection middleware
|
|
168
|
-
*/
|
|
169
|
-
static hpp(options = {}) {
|
|
170
|
-
const defaultOptions = {
|
|
171
|
-
whitelist: ["tags", "categories"], // Allow arrays for these parameters
|
|
172
|
-
};
|
|
173
|
-
const config = { ...defaultOptions, ...options };
|
|
174
|
-
return hpp(config);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Get MongoDB injection protection middleware
|
|
178
|
-
*/
|
|
179
|
-
static mongoSanitize(options = {}) {
|
|
180
|
-
const defaultOptions = {
|
|
181
|
-
replaceWith: "_",
|
|
182
|
-
onSanitize: (key, value) => {
|
|
183
|
-
console.warn(`[MongoSanitize] Sanitized key: ${key}, value: ${value}`);
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
const config = { ...defaultOptions, ...options };
|
|
187
|
-
return mongoSanitize(config);
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Get XSS protection middleware
|
|
191
|
-
*/
|
|
192
|
-
static xss(options = {}) {
|
|
193
|
-
const defaultOptions = {
|
|
194
|
-
whiteList: {
|
|
195
|
-
a: ["href", "title"],
|
|
196
|
-
b: [],
|
|
197
|
-
i: [],
|
|
198
|
-
strong: [],
|
|
199
|
-
em: [],
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
const config = { ...defaultOptions, ...options };
|
|
203
|
-
return (req, _res, next) => {
|
|
204
|
-
// Sanitize request body
|
|
205
|
-
if (req.body) {
|
|
206
|
-
req.body = this.sanitizeObject(req.body, config);
|
|
207
|
-
}
|
|
208
|
-
// Sanitize query parameters
|
|
209
|
-
if (req.query) {
|
|
210
|
-
req.query = this.sanitizeObject(req.query, config);
|
|
211
|
-
}
|
|
212
|
-
next();
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Get Morgan logging middleware
|
|
217
|
-
*/
|
|
218
|
-
static morgan(options = {}) {
|
|
219
|
-
const defaultFormat = options.format || "combined";
|
|
220
|
-
const defaultOptions = {
|
|
221
|
-
skip: (_req, res) => res.statusCode < 400, // Only log errors by default
|
|
222
|
-
stream: process.stdout,
|
|
223
|
-
};
|
|
224
|
-
const config = { ...defaultOptions, ...options };
|
|
225
|
-
return morgan(defaultFormat, config);
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Get Slow Down middleware for progressive delays
|
|
229
|
-
*/
|
|
230
|
-
static slowDown(options = {}) {
|
|
231
|
-
const defaultOptions = {
|
|
232
|
-
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
233
|
-
delayAfter: 2, // Allow 2 requests per windowMs without delay
|
|
234
|
-
delayMs: 500, // Add 500ms delay per request after delayAfter
|
|
235
|
-
maxDelayMs: 20000, // Maximum delay of 20 seconds
|
|
236
|
-
skipFailedRequests: false,
|
|
237
|
-
skipSuccessfulRequests: false,
|
|
238
|
-
};
|
|
239
|
-
const config = { ...defaultOptions, ...options };
|
|
240
|
-
return slowDown(config);
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Get Express Brute middleware for brute force protection
|
|
244
|
-
*/
|
|
245
|
-
static brute(options = {}) {
|
|
246
|
-
const store = new ExpressBrute.MemoryStore();
|
|
247
|
-
const defaultOptions = {
|
|
248
|
-
freeRetries: 2,
|
|
249
|
-
minWait: 5 * 60 * 1000, // 5 minutes
|
|
250
|
-
maxWait: 60 * 60 * 1000, // 1 hour
|
|
251
|
-
lifetime: 24 * 60 * 60, // 1 day (in seconds)
|
|
252
|
-
failCallback: (_req, res, _next, nextValidRequestDate) => {
|
|
253
|
-
res.status(429).json({
|
|
254
|
-
error: "Too many failed attempts",
|
|
255
|
-
message: "Account temporarily locked due to too many failed attempts",
|
|
256
|
-
nextValidRequestDate: nextValidRequestDate,
|
|
257
|
-
});
|
|
258
|
-
},
|
|
259
|
-
};
|
|
260
|
-
const config = { ...defaultOptions, ...options };
|
|
261
|
-
const bruteforce = new ExpressBrute(store, config);
|
|
262
|
-
return bruteforce.prevent;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Get Multer middleware for file uploads
|
|
266
|
-
*/
|
|
267
|
-
static multer(options = {}) {
|
|
268
|
-
const defaultOptions = {
|
|
269
|
-
limits: {
|
|
270
|
-
fileSize: 5 * 1024 * 1024, // 5MB limit
|
|
271
|
-
files: 5, // Maximum 5 files
|
|
272
|
-
},
|
|
273
|
-
fileFilter: (_req, file, cb) => {
|
|
274
|
-
// Allow only specific file types
|
|
275
|
-
const allowedTypes = /jpeg|jpg|png|gif|pdf|doc|docx/;
|
|
276
|
-
const extname = allowedTypes.test(file.originalname.toLowerCase());
|
|
277
|
-
const mimetype = allowedTypes.test(file.mimetype);
|
|
278
|
-
if (mimetype && extname) {
|
|
279
|
-
return cb(null, true);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
cb(new Error("Invalid file type. Only images and documents are allowed."));
|
|
283
|
-
}
|
|
284
|
-
},
|
|
285
|
-
};
|
|
286
|
-
const config = { ...defaultOptions, ...options };
|
|
287
|
-
return multer(config);
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Get all default security middleware
|
|
291
|
-
*/
|
|
292
|
-
static security(options = {}) {
|
|
293
|
-
return {
|
|
294
|
-
helmet: this.helmet(options.helmet),
|
|
295
|
-
cors: this.cors(options.cors),
|
|
296
|
-
rateLimit: this.rateLimit(options.rateLimit),
|
|
297
|
-
compression: this.compression(options.compression),
|
|
298
|
-
csrf: this.csrf(options.csrf),
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
// Helper method for XSS sanitization
|
|
302
|
-
static sanitizeObject(obj, config) {
|
|
303
|
-
if (typeof obj === "string") {
|
|
304
|
-
return xss(obj, config);
|
|
305
|
-
}
|
|
306
|
-
else if (Array.isArray(obj)) {
|
|
307
|
-
return obj.map((item) => this.sanitizeObject(item, config));
|
|
308
|
-
}
|
|
309
|
-
else if (obj && typeof obj === "object") {
|
|
310
|
-
const sanitized = {};
|
|
311
|
-
for (const key in obj) {
|
|
312
|
-
if (obj.hasOwnProperty(key)) {
|
|
313
|
-
sanitized[key] = this.sanitizeObject(obj[key], config);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return sanitized;
|
|
317
|
-
}
|
|
318
|
-
return obj;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
export { BuiltInMiddleware };
|
|
323
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/middleware/built-in/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|