xypriss 2.2.6 → 2.3.1

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.
Files changed (78) hide show
  1. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +9 -5
  2. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  3. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +9 -5
  4. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  5. package/dist/cjs/mods/security/src/components/cache/index.js +9 -5
  6. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
  7. package/dist/cjs/mods/security/src/components/fortified-function/index.js +8 -4
  8. package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -1
  9. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +9 -5
  10. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  11. package/dist/cjs/mods/security/src/index.js +9 -5
  12. package/dist/cjs/mods/security/src/index.js.map +1 -1
  13. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +87 -30
  14. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -1
  15. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js +320 -0
  16. package/dist/cjs/src/middleware/built-in/BuiltInMiddleware.js.map +1 -0
  17. package/dist/cjs/src/middleware/built-in/security/CommandInjectionDetector.js +215 -0
  18. package/dist/cjs/src/middleware/built-in/security/CommandInjectionDetector.js.map +1 -0
  19. package/dist/cjs/src/middleware/built-in/security/LDAPInjectionDetector.js +96 -0
  20. package/dist/cjs/src/middleware/built-in/security/LDAPInjectionDetector.js.map +1 -0
  21. package/dist/cjs/src/middleware/built-in/security/PathTraversalDetector.js +212 -0
  22. package/dist/cjs/src/middleware/built-in/security/PathTraversalDetector.js.map +1 -0
  23. package/dist/cjs/src/middleware/built-in/security/SQLInjectionDetector.js +335 -0
  24. package/dist/cjs/src/middleware/built-in/security/SQLInjectionDetector.js.map +1 -0
  25. package/dist/cjs/src/middleware/built-in/security/XXEProtector.js +175 -0
  26. package/dist/cjs/src/middleware/built-in/security/XXEProtector.js.map +1 -0
  27. package/dist/cjs/src/middleware/security-middleware.js +249 -132
  28. package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
  29. package/dist/cjs/src/plugins/modules/index.js +8 -4
  30. package/dist/cjs/src/plugins/modules/index.js.map +1 -1
  31. package/dist/cjs/src/server/FastServer.js +49 -32
  32. package/dist/cjs/src/server/FastServer.js.map +1 -1
  33. package/dist/cjs/src/server/ServerFactory.js +34 -1
  34. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  35. package/dist/cjs/src/server/components/multi-server/MultiServerManager.js +11 -2
  36. package/dist/cjs/src/server/components/multi-server/MultiServerManager.js.map +1 -1
  37. package/dist/cjs/src/server/const/default.js +15 -1
  38. package/dist/cjs/src/server/const/default.js.map +1 -1
  39. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +9 -5
  40. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  41. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +9 -5
  42. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  43. package/dist/esm/mods/security/src/components/cache/index.js +9 -5
  44. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  45. package/dist/esm/mods/security/src/components/fortified-function/index.js +8 -4
  46. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
  47. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +9 -5
  48. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  49. package/dist/esm/mods/security/src/index.js +9 -5
  50. package/dist/esm/mods/security/src/index.js.map +1 -1
  51. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +75 -18
  52. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -1
  53. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js +318 -0
  54. package/dist/esm/src/middleware/built-in/BuiltInMiddleware.js.map +1 -0
  55. package/dist/esm/src/middleware/built-in/security/CommandInjectionDetector.js +213 -0
  56. package/dist/esm/src/middleware/built-in/security/CommandInjectionDetector.js.map +1 -0
  57. package/dist/esm/src/middleware/built-in/security/LDAPInjectionDetector.js +94 -0
  58. package/dist/esm/src/middleware/built-in/security/LDAPInjectionDetector.js.map +1 -0
  59. package/dist/esm/src/middleware/built-in/security/PathTraversalDetector.js +210 -0
  60. package/dist/esm/src/middleware/built-in/security/PathTraversalDetector.js.map +1 -0
  61. package/dist/esm/src/middleware/built-in/security/SQLInjectionDetector.js +333 -0
  62. package/dist/esm/src/middleware/built-in/security/SQLInjectionDetector.js.map +1 -0
  63. package/dist/esm/src/middleware/built-in/security/XXEProtector.js +173 -0
  64. package/dist/esm/src/middleware/built-in/security/XXEProtector.js.map +1 -0
  65. package/dist/esm/src/middleware/security-middleware.js +248 -131
  66. package/dist/esm/src/middleware/security-middleware.js.map +1 -1
  67. package/dist/esm/src/plugins/modules/index.js +8 -4
  68. package/dist/esm/src/plugins/modules/index.js.map +1 -1
  69. package/dist/esm/src/server/FastServer.js +50 -33
  70. package/dist/esm/src/server/FastServer.js.map +1 -1
  71. package/dist/esm/src/server/ServerFactory.js +34 -1
  72. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  73. package/dist/esm/src/server/components/multi-server/MultiServerManager.js +11 -2
  74. package/dist/esm/src/server/components/multi-server/MultiServerManager.js.map +1 -1
  75. package/dist/esm/src/server/const/default.js +15 -1
  76. package/dist/esm/src/server/const/default.js.map +1 -1
  77. package/dist/index.d.ts +895 -39
  78. package/package.json +2 -2
@@ -0,0 +1,320 @@
1
+ 'use strict';
2
+
3
+ var helmet = require('helmet');
4
+ var cors = require('cors');
5
+ var rateLimit = require('express-rate-limit');
6
+ var compression = require('compression');
7
+ var hpp = require('hpp');
8
+ var mongoSanitize = require('express-mongo-sanitize');
9
+ var xss = require('xss');
10
+ var morgan = require('morgan');
11
+ var slowDown = require('express-slow-down');
12
+ var ExpressBrute = require('express-brute');
13
+ var multer = require('multer');
14
+ var csrfCsrf = require('csrf-csrf');
15
+
16
+ /**
17
+ * XyPriss Built-in Middleware
18
+ * Wrappers around popular middleware libraries
19
+ */
20
+ class BuiltInMiddleware {
21
+ /**
22
+ * Get Helmet middleware for security headers
23
+ */
24
+ static helmet(options = {}) {
25
+ const defaultOptions = {
26
+ contentSecurityPolicy: {
27
+ directives: {
28
+ defaultSrc: ["'self'"],
29
+ scriptSrc: ["'self'"],
30
+ styleSrc: ["'self'", "'unsafe-inline'"],
31
+ imgSrc: ["'self'", "data:"],
32
+ fontSrc: ["'self'"],
33
+ },
34
+ },
35
+ crossOriginEmbedderPolicy: true,
36
+ crossOriginOpenerPolicy: true,
37
+ crossOriginResourcePolicy: { policy: "same-origin" },
38
+ dnsPrefetchControl: { allow: false },
39
+ frameguard: { action: "deny" },
40
+ hidePoweredBy: true,
41
+ hsts: {
42
+ maxAge: 31536000,
43
+ includeSubDomains: true,
44
+ preload: false,
45
+ },
46
+ ieNoOpen: true,
47
+ noSniff: true,
48
+ originAgentCluster: true,
49
+ permittedCrossDomainPolicies: false,
50
+ referrerPolicy: { policy: "strict-origin-when-cross-origin" },
51
+ xssFilter: true,
52
+ };
53
+ const config = { ...defaultOptions, ...options };
54
+ return helmet(config);
55
+ }
56
+ /**
57
+ * Get CORS middleware
58
+ *
59
+ * By default, allows all headers to be developer-friendly.
60
+ * Developers can restrict headers via config if needed for production.
61
+ */
62
+ static cors(options = {}) {
63
+ const defaultOptions = {
64
+ origin: true,
65
+ methods: ["GET", "HEAD", "PUT", "PATCH", "POST", "DELETE"],
66
+ // Allow all headers by default - developers can restrict via config
67
+ // This prevents CORS issues during development
68
+ credentials: false,
69
+ maxAge: 86400, // 24 hours
70
+ };
71
+ const config = { ...defaultOptions, ...options };
72
+ return cors(config);
73
+ }
74
+ /**
75
+ * Get Rate Limiting middleware
76
+ */
77
+ static rateLimit(options = {}) {
78
+ const defaultOptions = {
79
+ windowMs: 15 * 60 * 1000, // 15 minutes
80
+ max: 100, // limit each IP to 100 requests per windowMs
81
+ message: {
82
+ error: "Too many requests from this IP, please try again later.",
83
+ retryAfter: "Please try again later.",
84
+ },
85
+ standardHeaders: true,
86
+ legacyHeaders: false,
87
+ handler: (req, res, next, options) => {
88
+ const message = options?.message;
89
+ if (typeof message === 'string') {
90
+ res.status(429).json({
91
+ error: "Rate limit exceeded",
92
+ message: message,
93
+ retryAfter: Math.ceil((options?.windowMs || 60000) / 1000) || 900,
94
+ });
95
+ }
96
+ else if (typeof message === 'object' && message !== null) {
97
+ res.status(429).json({
98
+ ...message,
99
+ retryAfter: Math.ceil((options?.windowMs || 60000) / 1000) || 900,
100
+ });
101
+ }
102
+ else {
103
+ res.status(429).json({
104
+ error: "Too many requests",
105
+ message: "Rate limit exceeded. Please try again later.",
106
+ retryAfter: Math.ceil((options?.windowMs || 60000) / 1000) || 900,
107
+ });
108
+ }
109
+ },
110
+ };
111
+ const config = { ...defaultOptions, ...options };
112
+ return rateLimit(config);
113
+ }
114
+ /**
115
+ * Get Compression middleware
116
+ */
117
+ static compression(options = {}) {
118
+ const defaultOptions = {
119
+ level: 6,
120
+ threshold: 1024, // Only compress responses >= 1KB
121
+ filter: (req, res) => {
122
+ // Don't compress responses with this request header
123
+ if (req.headers["x-no-compression"]) {
124
+ return false;
125
+ }
126
+ // Fallback to standard filter function
127
+ return compression.filter(req, res);
128
+ },
129
+ };
130
+ const config = { ...defaultOptions, ...options };
131
+ return compression(config);
132
+ }
133
+ /**
134
+ * CSRF protection middleware using csrf-csrf library
135
+ */
136
+ static csrf(options = {
137
+ getSecret: () => "e6ac40fffc5e9399eab10f5b84fcba2c923e7f74a73b76b56c11b722671eea5e",
138
+ getSessionIdentifier: (req) => req.session.id,
139
+ }) {
140
+ const defaultOptions = {
141
+ cookieName: "__Host-psifi.x-csrf-token",
142
+ cookieOptions: {
143
+ httpOnly: true,
144
+ sameSite: "strict",
145
+ secure: process.env.NODE_ENV === "production",
146
+ maxAge: 3600000, // 1 hour
147
+ },
148
+ size: 64,
149
+ ignoredMethods: ["GET", "HEAD", "OPTIONS"],
150
+ getTokenFromRequest: (req) => {
151
+ return (req.headers["x-csrf-token"] ||
152
+ req.body?._csrf ||
153
+ req.query?._csrf);
154
+ },
155
+ };
156
+ const config = { ...defaultOptions, ...options };
157
+ const { doubleCsrfProtection } = csrfCsrf.doubleCsrf(config);
158
+ // Return the protection middleware
159
+ return doubleCsrfProtection;
160
+ }
161
+ /**
162
+ * Get HPP (HTTP Parameter Pollution) protection middleware
163
+ */
164
+ static hpp(options = {}) {
165
+ const defaultOptions = {
166
+ whitelist: ["tags", "categories"], // Allow arrays for these parameters
167
+ };
168
+ const config = { ...defaultOptions, ...options };
169
+ return hpp(config);
170
+ }
171
+ /**
172
+ * Get MongoDB injection protection middleware
173
+ */
174
+ static mongoSanitize(options = {}) {
175
+ const defaultOptions = {
176
+ replaceWith: "_",
177
+ onSanitize: (key, value) => {
178
+ console.warn(`[MongoSanitize] Sanitized key: ${key}, value: ${value}`);
179
+ },
180
+ };
181
+ const config = { ...defaultOptions, ...options };
182
+ return mongoSanitize(config);
183
+ }
184
+ /**
185
+ * Get XSS protection middleware
186
+ */
187
+ static xss(options = {}) {
188
+ const defaultOptions = {
189
+ whiteList: {
190
+ a: ["href", "title"],
191
+ b: [],
192
+ i: [],
193
+ strong: [],
194
+ em: [],
195
+ },
196
+ };
197
+ const config = { ...defaultOptions, ...options };
198
+ return (req, _res, next) => {
199
+ // Sanitize request body
200
+ if (req.body) {
201
+ req.body = this.sanitizeObject(req.body, config);
202
+ }
203
+ // Sanitize query parameters
204
+ if (req.query) {
205
+ req.query = this.sanitizeObject(req.query, config);
206
+ }
207
+ next();
208
+ };
209
+ }
210
+ /**
211
+ * Get Morgan logging middleware
212
+ */
213
+ static morgan(options = {}) {
214
+ const defaultFormat = options.format || "combined";
215
+ const defaultOptions = {
216
+ skip: (_req, res) => res.statusCode < 400, // Only log errors by default
217
+ stream: process.stdout,
218
+ };
219
+ const config = { ...defaultOptions, ...options };
220
+ return morgan(defaultFormat, config);
221
+ }
222
+ /**
223
+ * Get Slow Down middleware for progressive delays
224
+ */
225
+ static slowDown(options = {}) {
226
+ const defaultOptions = {
227
+ windowMs: 15 * 60 * 1000, // 15 minutes
228
+ delayAfter: 2, // Allow 2 requests per windowMs without delay
229
+ delayMs: 500, // Add 500ms delay per request after delayAfter
230
+ maxDelayMs: 20000, // Maximum delay of 20 seconds
231
+ skipFailedRequests: false,
232
+ skipSuccessfulRequests: false,
233
+ };
234
+ const config = { ...defaultOptions, ...options };
235
+ return slowDown(config);
236
+ }
237
+ /**
238
+ * Get Express Brute middleware for brute force protection
239
+ */
240
+ static brute(options = {
241
+ prefix: "nehonix.xypriss.brute",
242
+ }) {
243
+ const store = new ExpressBrute.MemoryStore();
244
+ const defaultOptions = {
245
+ freeRetries: 2,
246
+ minWait: 5 * 60 * 1000, // 5 minutes
247
+ maxWait: 60 * 60 * 1000, // 1 hour
248
+ lifetime: 24 * 60 * 60, // 1 day (in seconds)
249
+ failCallback: (_req, res, _next, nextValidRequestDate) => {
250
+ res.status(429).json({
251
+ error: "Too many failed attempts",
252
+ message: "Account temporarily locked due to too many failed attempts",
253
+ nextValidRequestDate: nextValidRequestDate,
254
+ });
255
+ },
256
+ };
257
+ const config = { ...defaultOptions, ...options };
258
+ const bruteforce = new ExpressBrute(store, config);
259
+ return bruteforce.prevent;
260
+ }
261
+ /**
262
+ * Get Multer middleware for file uploads
263
+ */
264
+ static multer(options = {}) {
265
+ const defaultOptions = {
266
+ limits: {
267
+ fileSize: 5 * 1024 * 1024, // 5MB limit
268
+ files: 5, // Maximum 5 files
269
+ },
270
+ fileFilter: (_req, file, cb) => {
271
+ // Allow only specific file types
272
+ const allowedTypes = /jpeg|jpg|png|gif|pdf|doc|docx/;
273
+ const extname = allowedTypes.test(file.originalname.toLowerCase());
274
+ const mimetype = allowedTypes.test(file.mimetype);
275
+ if (mimetype && extname) {
276
+ return cb(null, true);
277
+ }
278
+ else {
279
+ cb(new Error("Invalid file type. Only images and documents are allowed."));
280
+ }
281
+ },
282
+ };
283
+ const config = { ...defaultOptions, ...options };
284
+ return multer(config);
285
+ }
286
+ /**
287
+ * Get all default security middleware
288
+ */
289
+ static security(options = {}) {
290
+ return {
291
+ helmet: this.helmet(options.helmet),
292
+ cors: this.cors(options.cors),
293
+ rateLimit: this.rateLimit(options.rateLimit),
294
+ compression: this.compression(options.compression),
295
+ csrf: this.csrf(options.csrf),
296
+ };
297
+ }
298
+ // Helper method for XSS sanitization
299
+ static sanitizeObject(obj, config) {
300
+ if (typeof obj === "string") {
301
+ return xss(obj, config);
302
+ }
303
+ else if (Array.isArray(obj)) {
304
+ return obj.map((item) => this.sanitizeObject(item, config));
305
+ }
306
+ else if (obj && typeof obj === "object") {
307
+ const sanitized = {};
308
+ for (const key in obj) {
309
+ if (obj.hasOwnProperty(key)) {
310
+ sanitized[key] = this.sanitizeObject(obj[key], config);
311
+ }
312
+ }
313
+ return sanitized;
314
+ }
315
+ return obj;
316
+ }
317
+ }
318
+
319
+ exports.BuiltInMiddleware = BuiltInMiddleware;
320
+ //# sourceMappingURL=BuiltInMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuiltInMiddleware.js","sources":["../../../../../src/middleware/built-in/BuiltInMiddleware.ts"],"sourcesContent":[null],"names":["doubleCsrf"],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Command Injection Detection Module
5
+ *
6
+ * Detects and prevents OS command injection attacks with
7
+ * intelligent context-aware false positive reduction
8
+ */
9
+ class CommandInjectionDetector {
10
+ constructor(config = {}) {
11
+ // High-risk command injection patterns
12
+ this.highRiskPatterns = [
13
+ // Command chaining
14
+ /[;&|`]\s*(ls|cat|wget|curl|nc|netcat|bash|sh|cmd|powershell|eval|exec)/gi,
15
+ // Command substitution
16
+ /\$\(.*?\)/g,
17
+ /`.*?`/g,
18
+ // Pipe to dangerous commands
19
+ /\|\s*(bash|sh|cmd|powershell|python|perl|ruby|node)/gi,
20
+ // Redirection with dangerous commands
21
+ /[<>]\s*(\/etc\/|\/bin\/|C:\\)/gi,
22
+ // Encoded command injection
23
+ /%0a|%0d|%09/gi, // newline, carriage return, tab
24
+ // Dangerous system commands
25
+ /(rm\s+-rf|del\s+\/|format\s+|mkfs|dd\s+if=)/gi,
26
+ // Network commands
27
+ /(wget|curl|nc|netcat|telnet|ssh|ftp)\s+/gi,
28
+ // Eval/exec patterns
29
+ /(eval|exec|system|passthru|shell_exec|popen)\s*\(/gi,
30
+ ];
31
+ // Medium-risk patterns
32
+ this.mediumRiskPatterns = [
33
+ // Shell metacharacters
34
+ /[;&|`$()]/g,
35
+ // Redirection operators
36
+ /[<>]/g,
37
+ // Common command names (could be legitimate text)
38
+ /\b(ls|cat|echo|pwd|cd|mkdir|touch|grep|find|chmod|chown)\b/gi,
39
+ ];
40
+ this.config = {
41
+ enabled: config.enabled ?? true,
42
+ strictMode: config.strictMode ?? false,
43
+ logAttempts: config.logAttempts ?? true,
44
+ blockOnDetection: config.blockOnDetection ?? true,
45
+ falsePositiveThreshold: config.falsePositiveThreshold ?? 0.7,
46
+ customPatterns: config.customPatterns ?? [],
47
+ allowedCommands: config.allowedCommands ?? [],
48
+ contextualAnalysis: config.contextualAnalysis ?? true,
49
+ };
50
+ }
51
+ /**
52
+ * Detect command injection attempts
53
+ */
54
+ detect(input, context) {
55
+ if (!input || typeof input !== 'string') {
56
+ return {
57
+ isMalicious: false,
58
+ confidence: 0,
59
+ detectedPatterns: [],
60
+ riskLevel: 'LOW',
61
+ };
62
+ }
63
+ const result = {
64
+ isMalicious: false,
65
+ confidence: 0,
66
+ detectedPatterns: [],
67
+ sanitizedInput: input,
68
+ riskLevel: 'LOW',
69
+ };
70
+ // High-risk pattern detection
71
+ let highRiskScore = 0;
72
+ this.highRiskPatterns.forEach((pattern, index) => {
73
+ const matches = input.match(pattern);
74
+ if (matches) {
75
+ const patternName = this.getHighRiskPatternName(index);
76
+ result.detectedPatterns.push(`${patternName}: ${matches.join(', ')}`);
77
+ highRiskScore += this.getHighRiskWeight(index);
78
+ }
79
+ });
80
+ // Medium-risk pattern detection with context
81
+ let mediumRiskScore = 0;
82
+ if (this.config.contextualAnalysis && context) {
83
+ mediumRiskScore = this.analyzeContext(input, context);
84
+ }
85
+ else {
86
+ this.mediumRiskPatterns.forEach((pattern) => {
87
+ const matches = input.match(pattern);
88
+ if (matches) {
89
+ mediumRiskScore += 0.1 * matches.length;
90
+ }
91
+ });
92
+ }
93
+ // Legitimacy checks
94
+ const legitimacyScore = this.calculateLegitimacyScore(input);
95
+ // Calculate final confidence
96
+ result.confidence = Math.max(0, highRiskScore + mediumRiskScore * 0.3 - legitimacyScore);
97
+ result.confidence = Math.min(result.confidence, 1.0);
98
+ // Determine risk level
99
+ if (result.confidence >= 0.9) {
100
+ result.riskLevel = 'CRITICAL';
101
+ result.isMalicious = true;
102
+ }
103
+ else if (result.confidence >= this.config.falsePositiveThreshold) {
104
+ result.riskLevel = 'HIGH';
105
+ result.isMalicious = true;
106
+ }
107
+ else if (result.confidence >= 0.4) {
108
+ result.riskLevel = 'MEDIUM';
109
+ result.isMalicious = false;
110
+ }
111
+ // Sanitize input
112
+ if (result.confidence >= 0.4) {
113
+ result.sanitizedInput = this.sanitizeInput(input);
114
+ }
115
+ // Log attempts
116
+ if (this.config.logAttempts && result.confidence >= 0.7) {
117
+ this.logAttempt(input, result);
118
+ }
119
+ return result;
120
+ }
121
+ /**
122
+ * Sanitize input by removing command injection sequences
123
+ */
124
+ sanitizeInput(input) {
125
+ let sanitized = input;
126
+ // Remove command chaining characters
127
+ sanitized = sanitized.replace(/[;&|`]/g, '');
128
+ // Remove command substitution
129
+ sanitized = sanitized.replace(/\$\(.*?\)/g, '');
130
+ // Remove backticks
131
+ sanitized = sanitized.replace(/`/g, '');
132
+ // Remove redirection operators
133
+ sanitized = sanitized.replace(/[<>]/g, '');
134
+ // Remove encoded newlines/tabs
135
+ sanitized = sanitized.replace(/%0a|%0d|%09/gi, '');
136
+ return sanitized.trim();
137
+ }
138
+ /**
139
+ * Analyze context to reduce false positives
140
+ */
141
+ analyzeContext(input, context) {
142
+ let score = 0;
143
+ // Check if this is a code/technical field where commands might be legitimate
144
+ const technicalContexts = ['code', 'script', 'command', 'terminal', 'shell'];
145
+ const isTechnicalContext = technicalContexts.some(ctx => context.fieldName?.toLowerCase().includes(ctx) ||
146
+ context.fieldType?.toLowerCase().includes(ctx));
147
+ this.mediumRiskPatterns.forEach((pattern, index) => {
148
+ const matches = input.match(pattern);
149
+ if (matches) {
150
+ let patternScore = 0.1 * matches.length;
151
+ // Reduce score for technical contexts
152
+ if (isTechnicalContext && index > 1) {
153
+ patternScore *= 0.2; // Reduce by 80% for command names in technical fields
154
+ }
155
+ score += patternScore;
156
+ }
157
+ });
158
+ return score;
159
+ }
160
+ /**
161
+ * Calculate legitimacy score
162
+ */
163
+ calculateLegitimacyScore(input) {
164
+ let score = 0;
165
+ // Natural language indicators
166
+ const words = input.split(/\s+/);
167
+ if (words.length > 3 && words.every(w => /^[a-zA-Z]+$/.test(w))) {
168
+ score += 0.3; // Looks like natural text
169
+ }
170
+ // No shell metacharacters
171
+ if (!/[;&|`$()<>]/.test(input)) {
172
+ score += 0.2;
173
+ }
174
+ // Reasonable length for user input
175
+ if (input.length > 10 && input.length < 200) {
176
+ score += 0.1;
177
+ }
178
+ return Math.min(score, 0.5);
179
+ }
180
+ getHighRiskPatternName(index) {
181
+ const names = [
182
+ 'Command chaining',
183
+ 'Command substitution ($())',
184
+ 'Backtick substitution',
185
+ 'Pipe to shell',
186
+ 'Redirection to system paths',
187
+ 'Encoded injection',
188
+ 'Dangerous system commands',
189
+ 'Network commands',
190
+ 'Eval/exec functions',
191
+ ];
192
+ return names[index] || `High-risk pattern ${index}`;
193
+ }
194
+ getHighRiskWeight(index) {
195
+ const weights = [0.9, 0.9, 0.9, 0.8, 0.7, 0.6, 0.9, 0.7, 0.9];
196
+ return weights[index] || 0.7;
197
+ }
198
+ logAttempt(input, result) {
199
+ console.warn('[CommandInjection] Attack detected:', {
200
+ timestamp: new Date().toISOString(),
201
+ input: input.substring(0, 100),
202
+ confidence: result.confidence,
203
+ patterns: result.detectedPatterns,
204
+ });
205
+ }
206
+ updateConfig(newConfig) {
207
+ this.config = { ...this.config, ...newConfig };
208
+ }
209
+ getConfig() {
210
+ return { ...this.config };
211
+ }
212
+ }
213
+
214
+ module.exports = CommandInjectionDetector;
215
+ //# sourceMappingURL=CommandInjectionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandInjectionDetector.js","sources":["../../../../../../src/middleware/built-in/security/CommandInjectionDetector.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * LDAP Injection Detection Module
5
+ *
6
+ * Detects and prevents LDAP injection attacks
7
+ */
8
+ class LDAPInjectionDetector {
9
+ constructor(config = {}) {
10
+ // LDAP injection patterns
11
+ this.injectionPatterns = [
12
+ // LDAP filter metacharacters
13
+ /[*()\\|&]/g,
14
+ // Null byte
15
+ /\x00/g,
16
+ // LDAP filter injection attempts
17
+ /\)\s*\(\s*\|/gi, // )( | pattern
18
+ /\)\s*\(\s*&/gi, // )( & pattern
19
+ // Wildcard abuse
20
+ /\*{2,}/g,
21
+ // DN injection
22
+ /,\s*(cn|ou|dc|o)=/gi,
23
+ ];
24
+ this.config = {
25
+ enabled: config.enabled ?? true,
26
+ strictMode: config.strictMode ?? false,
27
+ logAttempts: config.logAttempts ?? true,
28
+ blockOnDetection: config.blockOnDetection ?? true,
29
+ falsePositiveThreshold: config.falsePositiveThreshold ?? 0.6,
30
+ customPatterns: config.customPatterns ?? [],
31
+ };
32
+ }
33
+ detect(input) {
34
+ if (!input || typeof input !== 'string') {
35
+ return {
36
+ isMalicious: false,
37
+ confidence: 0,
38
+ detectedPatterns: [],
39
+ riskLevel: 'LOW',
40
+ };
41
+ }
42
+ const result = {
43
+ isMalicious: false,
44
+ confidence: 0,
45
+ detectedPatterns: [],
46
+ sanitizedInput: input,
47
+ riskLevel: 'LOW',
48
+ };
49
+ let riskScore = 0;
50
+ this.injectionPatterns.forEach((pattern, index) => {
51
+ const matches = input.match(pattern);
52
+ if (matches) {
53
+ result.detectedPatterns.push(`LDAP metacharacter: ${matches.join(', ')}`);
54
+ riskScore += 0.3 * matches.length;
55
+ }
56
+ });
57
+ result.confidence = Math.min(riskScore, 1.0);
58
+ if (result.confidence >= 0.7) {
59
+ result.riskLevel = 'HIGH';
60
+ result.isMalicious = true;
61
+ }
62
+ else if (result.confidence >= this.config.falsePositiveThreshold) {
63
+ result.riskLevel = 'MEDIUM';
64
+ result.isMalicious = this.config.strictMode;
65
+ }
66
+ if (result.confidence >= 0.3) {
67
+ result.sanitizedInput = this.sanitize(input);
68
+ }
69
+ if (this.config.logAttempts && result.confidence >= 0.6) {
70
+ console.warn('[LDAP] Injection attempt detected:', {
71
+ timestamp: new Date().toISOString(),
72
+ input: input.substring(0, 100),
73
+ confidence: result.confidence,
74
+ });
75
+ }
76
+ return result;
77
+ }
78
+ sanitize(input) {
79
+ // Escape LDAP special characters
80
+ return input
81
+ .replace(/\\/g, '\\5c')
82
+ .replace(/\*/g, '\\2a')
83
+ .replace(/\(/g, '\\28')
84
+ .replace(/\)/g, '\\29')
85
+ .replace(/\x00/g, '\\00');
86
+ }
87
+ updateConfig(newConfig) {
88
+ this.config = { ...this.config, ...newConfig };
89
+ }
90
+ getConfig() {
91
+ return { ...this.config };
92
+ }
93
+ }
94
+
95
+ module.exports = LDAPInjectionDetector;
96
+ //# sourceMappingURL=LDAPInjectionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDAPInjectionDetector.js","sources":["../../../../../../src/middleware/built-in/security/LDAPInjectionDetector.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}