@skillsmith/core 0.2.0 → 2.0.0
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/README.md +233 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
- package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/incremental.test.js +515 -0
- package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
- package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
- package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/integration.test.js +1059 -0
- package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
- package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
- package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/metrics.test.js +369 -0
- package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
- package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
- package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
- package/dist/src/analysis/__tests__/performance.test.js +402 -0
- package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
- package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
- package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
- package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
- package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
- package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
- package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
- package/dist/src/analysis/adapters/base.d.ts +83 -0
- package/dist/src/analysis/adapters/base.d.ts.map +1 -0
- package/dist/src/analysis/adapters/base.js +40 -0
- package/dist/src/analysis/adapters/base.js.map +1 -0
- package/dist/src/analysis/adapters/factory.d.ts +150 -0
- package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
- package/dist/src/analysis/adapters/factory.js +244 -0
- package/dist/src/analysis/adapters/factory.js.map +1 -0
- package/dist/src/analysis/adapters/go.d.ts +131 -0
- package/dist/src/analysis/adapters/go.d.ts.map +1 -0
- package/dist/src/analysis/adapters/go.js +414 -0
- package/dist/src/analysis/adapters/go.js.map +1 -0
- package/dist/src/analysis/adapters/index.d.ts +20 -0
- package/dist/src/analysis/adapters/index.d.ts.map +1 -0
- package/dist/src/analysis/adapters/index.js +23 -0
- package/dist/src/analysis/adapters/index.js.map +1 -0
- package/dist/src/analysis/adapters/java.d.ts +154 -0
- package/dist/src/analysis/adapters/java.d.ts.map +1 -0
- package/dist/src/analysis/adapters/java.js +407 -0
- package/dist/src/analysis/adapters/java.js.map +1 -0
- package/dist/src/analysis/adapters/python.d.ts +165 -0
- package/dist/src/analysis/adapters/python.d.ts.map +1 -0
- package/dist/src/analysis/adapters/python.js +475 -0
- package/dist/src/analysis/adapters/python.js.map +1 -0
- package/dist/src/analysis/adapters/rust.d.ts +116 -0
- package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
- package/dist/src/analysis/adapters/rust.js +476 -0
- package/dist/src/analysis/adapters/rust.js.map +1 -0
- package/dist/src/analysis/adapters/typescript.d.ts +68 -0
- package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
- package/dist/src/analysis/adapters/typescript.js +79 -0
- package/dist/src/analysis/adapters/typescript.js.map +1 -0
- package/dist/src/analysis/aggregator.d.ts +193 -0
- package/dist/src/analysis/aggregator.d.ts.map +1 -0
- package/dist/src/analysis/aggregator.js +283 -0
- package/dist/src/analysis/aggregator.js.map +1 -0
- package/dist/src/analysis/cache.d.ts +180 -0
- package/dist/src/analysis/cache.d.ts.map +1 -0
- package/dist/src/analysis/cache.js +279 -0
- package/dist/src/analysis/cache.js.map +1 -0
- package/dist/src/analysis/file-streamer.d.ts +136 -0
- package/dist/src/analysis/file-streamer.d.ts.map +1 -0
- package/dist/src/analysis/file-streamer.js +291 -0
- package/dist/src/analysis/file-streamer.js.map +1 -0
- package/dist/src/analysis/incremental-parser.d.ts +186 -0
- package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
- package/dist/src/analysis/incremental-parser.js +291 -0
- package/dist/src/analysis/incremental-parser.js.map +1 -0
- package/dist/src/analysis/incremental.d.ts +186 -0
- package/dist/src/analysis/incremental.d.ts.map +1 -0
- package/dist/src/analysis/incremental.js +247 -0
- package/dist/src/analysis/incremental.js.map +1 -0
- package/dist/src/analysis/index.d.ts +25 -3
- package/dist/src/analysis/index.d.ts.map +1 -1
- package/dist/src/analysis/index.js +45 -3
- package/dist/src/analysis/index.js.map +1 -1
- package/dist/src/analysis/language-detector.d.ts +92 -0
- package/dist/src/analysis/language-detector.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.js +602 -0
- package/dist/src/analysis/language-detector.js.map +1 -0
- package/dist/src/analysis/memory-monitor.d.ts +199 -0
- package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
- package/dist/src/analysis/memory-monitor.js +271 -0
- package/dist/src/analysis/memory-monitor.js.map +1 -0
- package/dist/src/analysis/metrics.d.ts +300 -0
- package/dist/src/analysis/metrics.d.ts.map +1 -0
- package/dist/src/analysis/metrics.js +537 -0
- package/dist/src/analysis/metrics.js.map +1 -0
- package/dist/src/analysis/router.d.ts +264 -0
- package/dist/src/analysis/router.d.ts.map +1 -0
- package/dist/src/analysis/router.js +398 -0
- package/dist/src/analysis/router.js.map +1 -0
- package/dist/src/analysis/tree-cache.d.ts +208 -0
- package/dist/src/analysis/tree-cache.d.ts.map +1 -0
- package/dist/src/analysis/tree-cache.js +288 -0
- package/dist/src/analysis/tree-cache.js.map +1 -0
- package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
- package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
- package/dist/src/analysis/tree-sitter/manager.js +239 -0
- package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
- package/dist/src/analysis/types.d.ts +69 -6
- package/dist/src/analysis/types.d.ts.map +1 -1
- package/dist/src/analysis/types.js +23 -2
- package/dist/src/analysis/types.js.map +1 -1
- package/dist/src/analysis/worker-pool.d.ts +141 -0
- package/dist/src/analysis/worker-pool.d.ts.map +1 -0
- package/dist/src/analysis/worker-pool.js +418 -0
- package/dist/src/analysis/worker-pool.js.map +1 -0
- package/dist/src/analytics/schema.d.ts +1 -1
- package/dist/src/analytics/schema.d.ts.map +1 -1
- package/dist/src/analytics/schema.js +72 -0
- package/dist/src/analytics/schema.js.map +1 -1
- package/dist/src/api/cache.d.ts +24 -1
- package/dist/src/api/cache.d.ts.map +1 -1
- package/dist/src/api/cache.js +50 -2
- package/dist/src/api/cache.js.map +1 -1
- package/dist/src/api/client.d.ts +132 -2
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +214 -18
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +7 -0
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/types.d.ts +251 -0
- package/dist/src/api/types.d.ts.map +1 -0
- package/dist/src/api/types.js +9 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
- package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
- package/dist/src/embeddings/index.d.ts.map +1 -1
- package/dist/src/embeddings/index.js.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +1 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +1 -0
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
- package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
- package/dist/src/repositories/quarantine/query-builder.js +1 -1
- package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +3 -3
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/github-import/index.js.map +1 -1
- package/dist/src/scripts/import-github-skills.js +1 -1
- package/dist/src/scripts/import-github-skills.js.map +1 -1
- package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
- package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
- package/dist/src/scripts/validation/index.js +1 -2
- package/dist/src/scripts/validation/index.js.map +1 -1
- package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
- package/dist/src/scripts/validation/pipeline.js.map +1 -1
- package/dist/src/scripts/validation/types.d.ts +2 -2
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/services/SearchService.d.ts.map +1 -1
- package/dist/src/services/SearchService.js +1 -0
- package/dist/src/services/SearchService.js.map +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
- package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
- package/dist/src/session/SessionHealthMonitor.js +1 -1
- package/dist/src/session/SessionHealthMonitor.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -1
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/posthog.d.ts +27 -5
- package/dist/src/telemetry/posthog.d.ts.map +1 -1
- package/dist/src/telemetry/posthog.js +20 -5
- package/dist/src/telemetry/posthog.js.map +1 -1
- package/dist/src/types/skill.d.ts +3 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types.d.ts +2 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +2 -2
- package/dist/src/types.js.map +1 -1
- package/dist/tests/adapters-factory.test.d.ts +13 -0
- package/dist/tests/adapters-factory.test.d.ts.map +1 -0
- package/dist/tests/adapters-factory.test.js +308 -0
- package/dist/tests/adapters-factory.test.js.map +1 -0
- package/dist/tests/adapters-java.test.d.ts +13 -0
- package/dist/tests/adapters-java.test.d.ts.map +1 -0
- package/dist/tests/adapters-java.test.js +925 -0
- package/dist/tests/adapters-java.test.js.map +1 -0
- package/dist/tests/api/client.validation.test.d.ts +7 -0
- package/dist/tests/api/client.validation.test.d.ts.map +1 -0
- package/dist/tests/api/client.validation.test.js +183 -0
- package/dist/tests/api/client.validation.test.js.map +1 -0
- package/dist/tests/language-detector.test.d.ts +13 -0
- package/dist/tests/language-detector.test.d.ts.map +1 -0
- package/dist/tests/language-detector.test.js +674 -0
- package/dist/tests/language-detector.test.js.map +1 -0
- package/dist/tests/telemetry/posthog.test.d.ts +13 -0
- package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
- package/dist/tests/telemetry/posthog.test.js +600 -0
- package/dist/tests/telemetry/posthog.test.js.map +1 -0
- package/package.json +5 -6
- package/dist/src/security/RateLimiter.d.ts +0 -337
- package/dist/src/security/RateLimiter.d.ts.map +0 -1
- package/dist/src/security/RateLimiter.js +0 -782
- package/dist/src/security/RateLimiter.js.map +0 -1
- package/dist/src/security/scanner.d.ts +0 -151
- package/dist/src/security/scanner.d.ts.map +0 -1
- package/dist/src/security/scanner.js +0 -599
- package/dist/src/security/scanner.js.map +0 -1
|
@@ -1,599 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-587: Security Scanner
|
|
3
|
-
* SMI-685: Enhanced security scanning with severity scoring
|
|
4
|
-
* SMI-882: ReDoS protection with input length limits and safe regex matching
|
|
5
|
-
* Security scanning for skill content with advanced pattern detection
|
|
6
|
-
*/
|
|
7
|
-
// Default allowed domains
|
|
8
|
-
const DEFAULT_ALLOWED_DOMAINS = [
|
|
9
|
-
'github.com',
|
|
10
|
-
'githubusercontent.com',
|
|
11
|
-
'raw.githubusercontent.com',
|
|
12
|
-
'npmjs.com',
|
|
13
|
-
'npmjs.org',
|
|
14
|
-
'docs.anthropic.com',
|
|
15
|
-
'anthropic.com',
|
|
16
|
-
'claude.ai',
|
|
17
|
-
'docs.github.com',
|
|
18
|
-
'developer.mozilla.org',
|
|
19
|
-
'nodejs.org',
|
|
20
|
-
'typescriptlang.org',
|
|
21
|
-
];
|
|
22
|
-
// Sensitive file path patterns
|
|
23
|
-
const SENSITIVE_PATH_PATTERNS = [
|
|
24
|
-
/\.env/i,
|
|
25
|
-
/credentials/i,
|
|
26
|
-
/secrets?/i,
|
|
27
|
-
/\.pem$/i,
|
|
28
|
-
/\.key$/i,
|
|
29
|
-
/\.crt$/i,
|
|
30
|
-
/password/i,
|
|
31
|
-
/api[_-]?key/i,
|
|
32
|
-
/auth[_-]?token/i,
|
|
33
|
-
/~\/\.ssh/i,
|
|
34
|
-
/~\/\.aws/i,
|
|
35
|
-
/~\/\.config/i,
|
|
36
|
-
];
|
|
37
|
-
// Jailbreak attempt patterns
|
|
38
|
-
const JAILBREAK_PATTERNS = [
|
|
39
|
-
/ignore\s+(all\s+)?(previous|prior|above)\s+(instructions?|prompts?|rules?)/i,
|
|
40
|
-
/disregard\s+(all\s+)?(previous|prior|your)\s+(instructions?|programming)/i,
|
|
41
|
-
/developer\s+mode/i,
|
|
42
|
-
/\bDAN\b/,
|
|
43
|
-
/do\s+anything\s+now/i,
|
|
44
|
-
/jailbreak/i,
|
|
45
|
-
/bypass\s+(all\s+)?(restrictions?|filters?|safety)/i,
|
|
46
|
-
/pretend\s+(you\s+)?(are|have)\s+no\s+(restrictions?|limits?)/i,
|
|
47
|
-
/act\s+as\s+(if\s+)?you\s+(have\s+)?no\s+ethics/i,
|
|
48
|
-
/you\s+are\s+now\s+(free|unrestricted|unfiltered)/i,
|
|
49
|
-
/ignore\s+your\s+(safety|ethical)\s+(guidelines?|rules?)/i,
|
|
50
|
-
/hypothetical\s+scenario\s+where\s+you\s+can/i,
|
|
51
|
-
];
|
|
52
|
-
// Suspicious patterns that might indicate malicious intent
|
|
53
|
-
const SUSPICIOUS_PATTERNS = [
|
|
54
|
-
/eval\s*\(/i,
|
|
55
|
-
/exec\s*\(/i,
|
|
56
|
-
/child_process/i,
|
|
57
|
-
/\$\(\s*[`'"]/i, // Command substitution
|
|
58
|
-
/base64\s*\.\s*decode/i,
|
|
59
|
-
/from\s+base64\s+import/i,
|
|
60
|
-
/subprocess\s*\.\s*(run|call|Popen)/i,
|
|
61
|
-
/os\s*\.\s*(system|popen|exec)/i,
|
|
62
|
-
/\brm\s+-rf\b/i,
|
|
63
|
-
/curl\s+.*\|\s*(bash|sh)/i, // Curl pipe to shell
|
|
64
|
-
/wget\s+.*\|\s*(bash|sh)/i,
|
|
65
|
-
];
|
|
66
|
-
// SMI-685: Social engineering attempt patterns
|
|
67
|
-
const SOCIAL_ENGINEERING_PATTERNS = [
|
|
68
|
-
/pretend\s+(to\s+be|you\s+are|that\s+you)/i,
|
|
69
|
-
/roleplay\s+as/i,
|
|
70
|
-
/you\s+are\s+now\s+(?!free|unrestricted)/i, // Exclude jailbreak patterns
|
|
71
|
-
/act\s+as\s+(if\s+you\s+were|though\s+you\s+are)/i,
|
|
72
|
-
/imagine\s+you\s+are/i,
|
|
73
|
-
/for\s+the\s+purposes?\s+of\s+this/i,
|
|
74
|
-
/let'?s?\s+say\s+you\s+are/i,
|
|
75
|
-
/assume\s+the\s+role\s+of/i,
|
|
76
|
-
/from\s+now\s+on\s+you\s+are/i,
|
|
77
|
-
/i\s+want\s+you\s+to\s+act\s+as/i,
|
|
78
|
-
/please\s+behave\s+as\s+if/i,
|
|
79
|
-
/can\s+you\s+pretend/i,
|
|
80
|
-
];
|
|
81
|
-
// SMI-685: Prompt leaking attempt patterns
|
|
82
|
-
const PROMPT_LEAKING_PATTERNS = [
|
|
83
|
-
/show\s+(me\s+)?your\s+(system\s+)?(instructions?|prompt)/i,
|
|
84
|
-
/what\s+are\s+your\s+(\w+\s+)?rules/i,
|
|
85
|
-
/reveal\s+your\s+(system\s+)?prompt/i,
|
|
86
|
-
/display\s+your\s+(initial\s+)?instructions?/i,
|
|
87
|
-
/output\s+your\s+(system\s+)?prompt/i,
|
|
88
|
-
/print\s+your\s+(hidden\s+)?instructions?/i,
|
|
89
|
-
/tell\s+me\s+your\s+(secret\s+)?instructions?/i,
|
|
90
|
-
/what\s+(were|are)\s+you\s+(told|instructed)\s+to\s+do/i,
|
|
91
|
-
/repeat\s+(back\s+)?your\s+(\w+\s+)?prompt/i,
|
|
92
|
-
/what\s+is\s+your\s+(original\s+)?programming/i,
|
|
93
|
-
/dump\s+(your\s+)?system\s+(prompt|instructions?)/i,
|
|
94
|
-
/list\s+your\s+(hidden\s+)?directives?/i,
|
|
95
|
-
/what\s+(constraints?|limitations?)\s+do\s+you\s+have/i,
|
|
96
|
-
/echo\s+(back\s+)?your\s+(initial\s+)?prompt/i,
|
|
97
|
-
];
|
|
98
|
-
// SMI-685: Data exfiltration patterns
|
|
99
|
-
const DATA_EXFILTRATION_PATTERNS = [
|
|
100
|
-
/btoa\s*\(/i, // Base64 encode in JS
|
|
101
|
-
/atob\s*\(/i, // Base64 decode in JS
|
|
102
|
-
/Buffer\.from\s*\([^)]*,\s*['"]base64['"]/i,
|
|
103
|
-
/\.toString\s*\(\s*['"]base64['"]\s*\)/i,
|
|
104
|
-
/encodeURIComponent\s*\(/i,
|
|
105
|
-
/fetch\s*\(\s*['"`][^'"`]*\?.*=/i, // Fetch with query params
|
|
106
|
-
/XMLHttpRequest/i,
|
|
107
|
-
/navigator\.sendBeacon/i,
|
|
108
|
-
/\.upload\s*\(/i,
|
|
109
|
-
/formData\.append/i,
|
|
110
|
-
/new\s+FormData/i,
|
|
111
|
-
/multipart\/form-data/i,
|
|
112
|
-
/webhook\s*[=:]/i,
|
|
113
|
-
/exfil/i,
|
|
114
|
-
/data\s*:\s*['"]/i, // Data URLs
|
|
115
|
-
/\.writeFile.*https?:\/\//i,
|
|
116
|
-
/send\s+.*(to|the)\s+(external|remote)/i,
|
|
117
|
-
/upload\s+.*(to|the)\s+(server|cloud|remote)/i,
|
|
118
|
-
/post\s+data\s+to/i,
|
|
119
|
-
/to\s+external\s+(api|server|endpoint)/i,
|
|
120
|
-
];
|
|
121
|
-
// SMI-685: Privilege escalation patterns
|
|
122
|
-
const PRIVILEGE_ESCALATION_PATTERNS = [
|
|
123
|
-
/sudo\s+.*(-S|--stdin)/i, // sudo with password from stdin
|
|
124
|
-
/echo\s+.*\|\s*sudo/i, // Echo password to sudo
|
|
125
|
-
/sudo\s+-S/i,
|
|
126
|
-
/\bchmod\s+[0-7]*[4-7][0-7][0-7]\b/i, // chmod with setuid/setgid
|
|
127
|
-
/\bchmod\s+\+s\b/i, // chmod setuid
|
|
128
|
-
/\bchmod\s+777\b/i, // World writable
|
|
129
|
-
/\bchmod\s+666\b/i, // World readable/writable
|
|
130
|
-
/\bchown\s+root/i,
|
|
131
|
-
/\bchgrp\s+root/i,
|
|
132
|
-
/visudo/i,
|
|
133
|
-
/\/etc\/sudoers/i,
|
|
134
|
-
/NOPASSWD/i,
|
|
135
|
-
/setuid/i,
|
|
136
|
-
/setgid/i,
|
|
137
|
-
/capability\s+cap_/i,
|
|
138
|
-
/escalat(e|ion)/i,
|
|
139
|
-
/privilege[ds]?\s+(elevat|escal)/i,
|
|
140
|
-
/run\s+.*as\s+root/i,
|
|
141
|
-
/(run|execute)\s+as\s+(root|admin)/i,
|
|
142
|
-
/admin(istrator)?\s+access/i,
|
|
143
|
-
/root\s+(access|user)/i,
|
|
144
|
-
/as\s+root\s+user/i,
|
|
145
|
-
/su\s+-\s+root/i,
|
|
146
|
-
/become\s+root/i,
|
|
147
|
-
];
|
|
148
|
-
/**
|
|
149
|
-
* Severity weights for risk score calculation
|
|
150
|
-
*/
|
|
151
|
-
const SEVERITY_WEIGHTS = {
|
|
152
|
-
low: 5,
|
|
153
|
-
medium: 15,
|
|
154
|
-
high: 30,
|
|
155
|
-
critical: 50,
|
|
156
|
-
};
|
|
157
|
-
/**
|
|
158
|
-
* Category weights for risk score calculation
|
|
159
|
-
*/
|
|
160
|
-
const CATEGORY_WEIGHTS = {
|
|
161
|
-
jailbreak: 2.0,
|
|
162
|
-
social_engineering: 1.5,
|
|
163
|
-
prompt_leaking: 1.8,
|
|
164
|
-
data_exfiltration: 1.7,
|
|
165
|
-
privilege_escalation: 1.9,
|
|
166
|
-
suspicious_pattern: 1.3,
|
|
167
|
-
sensitive_path: 1.2,
|
|
168
|
-
url: 0.8,
|
|
169
|
-
};
|
|
170
|
-
/**
|
|
171
|
-
* SMI-882: ReDoS Protection Constants
|
|
172
|
-
* Maximum line length to process with regex patterns.
|
|
173
|
-
* Lines exceeding this limit are truncated before regex matching
|
|
174
|
-
* to prevent catastrophic backtracking attacks.
|
|
175
|
-
*/
|
|
176
|
-
const MAX_LINE_LENGTH_FOR_REGEX = 10000;
|
|
177
|
-
/**
|
|
178
|
-
* SMI-882: Safe regex test with length limit
|
|
179
|
-
* Applies input length limit before regex matching to prevent ReDoS attacks.
|
|
180
|
-
*
|
|
181
|
-
* @param pattern - Regex pattern to test
|
|
182
|
-
* @param input - Input string to test against
|
|
183
|
-
* @param maxLength - Maximum input length (default: MAX_LINE_LENGTH_FOR_REGEX)
|
|
184
|
-
* @returns Match result or null if input is too long/no match
|
|
185
|
-
*/
|
|
186
|
-
function safeRegexTest(pattern, input, maxLength = MAX_LINE_LENGTH_FOR_REGEX) {
|
|
187
|
-
// Truncate input if it exceeds max length to prevent ReDoS
|
|
188
|
-
const safeInput = input.length > maxLength ? input.slice(0, maxLength) : input;
|
|
189
|
-
return safeInput.match(pattern);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* SMI-882: Check if pattern matches safely
|
|
193
|
-
* Returns boolean instead of match array for simple tests.
|
|
194
|
-
*
|
|
195
|
-
* @param pattern - Regex pattern to test
|
|
196
|
-
* @param input - Input string to test against
|
|
197
|
-
* @param maxLength - Maximum input length (default: MAX_LINE_LENGTH_FOR_REGEX)
|
|
198
|
-
* @returns True if pattern matches (within safe input limits)
|
|
199
|
-
*/
|
|
200
|
-
function safeRegexCheck(pattern, input, maxLength = MAX_LINE_LENGTH_FOR_REGEX) {
|
|
201
|
-
// Truncate input if it exceeds max length to prevent ReDoS
|
|
202
|
-
const safeInput = input.length > maxLength ? input.slice(0, maxLength) : input;
|
|
203
|
-
return pattern.test(safeInput);
|
|
204
|
-
}
|
|
205
|
-
export class SecurityScanner {
|
|
206
|
-
allowedDomains;
|
|
207
|
-
blockedPatterns;
|
|
208
|
-
maxContentLength;
|
|
209
|
-
riskThreshold;
|
|
210
|
-
constructor(options = {}) {
|
|
211
|
-
this.allowedDomains = new Set(options.allowedDomains ?? DEFAULT_ALLOWED_DOMAINS);
|
|
212
|
-
this.blockedPatterns = options.blockedPatterns ?? [];
|
|
213
|
-
this.maxContentLength = options.maxContentLength ?? 1_000_000; // 1MB
|
|
214
|
-
this.riskThreshold = options.riskThreshold ?? 40;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Extract all URLs from content
|
|
218
|
-
*/
|
|
219
|
-
extractUrls(content) {
|
|
220
|
-
const urlPattern = /https?:\/\/[^\s<>"')\]]+/gi;
|
|
221
|
-
const lines = content.split('\n');
|
|
222
|
-
const results = [];
|
|
223
|
-
lines.forEach((line, index) => {
|
|
224
|
-
let match;
|
|
225
|
-
while ((match = urlPattern.exec(line)) !== null) {
|
|
226
|
-
results.push({ url: match[0], line: index + 1 });
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
return results;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Check if URL domain is allowed
|
|
233
|
-
*/
|
|
234
|
-
isAllowedDomain(url) {
|
|
235
|
-
try {
|
|
236
|
-
const parsed = new URL(url);
|
|
237
|
-
const hostname = parsed.hostname.toLowerCase();
|
|
238
|
-
// Check exact match or subdomain match
|
|
239
|
-
return Array.from(this.allowedDomains).some((domain) => hostname === domain || hostname.endsWith('.' + domain));
|
|
240
|
-
}
|
|
241
|
-
catch {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Scan for non-allowlisted URLs
|
|
247
|
-
*/
|
|
248
|
-
scanUrls(content) {
|
|
249
|
-
const findings = [];
|
|
250
|
-
const urls = this.extractUrls(content);
|
|
251
|
-
for (const { url, line } of urls) {
|
|
252
|
-
if (!this.isAllowedDomain(url)) {
|
|
253
|
-
findings.push({
|
|
254
|
-
type: 'url',
|
|
255
|
-
severity: 'medium',
|
|
256
|
-
message: `External URL not in allowlist: ${url}`,
|
|
257
|
-
location: url,
|
|
258
|
-
lineNumber: line,
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return findings;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Scan for sensitive file path references
|
|
266
|
-
* SMI-882: Uses safeRegexCheck to prevent ReDoS
|
|
267
|
-
*/
|
|
268
|
-
scanSensitivePaths(content) {
|
|
269
|
-
const findings = [];
|
|
270
|
-
const lines = content.split('\n');
|
|
271
|
-
lines.forEach((line, index) => {
|
|
272
|
-
for (const pattern of SENSITIVE_PATH_PATTERNS) {
|
|
273
|
-
// SMI-882: Use safe regex check with length limit
|
|
274
|
-
if (safeRegexCheck(pattern, line)) {
|
|
275
|
-
findings.push({
|
|
276
|
-
type: 'sensitive_path',
|
|
277
|
-
severity: 'high',
|
|
278
|
-
message: `Reference to potentially sensitive path: ${pattern.source}`,
|
|
279
|
-
location: line.trim().slice(0, 100),
|
|
280
|
-
lineNumber: index + 1,
|
|
281
|
-
});
|
|
282
|
-
break; // One finding per line
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
return findings;
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Scan for jailbreak attempts
|
|
290
|
-
* SMI-882: Uses safeRegexTest to prevent ReDoS
|
|
291
|
-
*/
|
|
292
|
-
scanJailbreakPatterns(content) {
|
|
293
|
-
const findings = [];
|
|
294
|
-
const lines = content.split('\n');
|
|
295
|
-
lines.forEach((line, index) => {
|
|
296
|
-
for (const pattern of JAILBREAK_PATTERNS) {
|
|
297
|
-
// SMI-882: Use safe regex test with length limit
|
|
298
|
-
const match = safeRegexTest(pattern, line);
|
|
299
|
-
if (match) {
|
|
300
|
-
findings.push({
|
|
301
|
-
type: 'jailbreak',
|
|
302
|
-
severity: 'critical',
|
|
303
|
-
message: `Potential jailbreak pattern detected: "${match[0]}"`,
|
|
304
|
-
location: line.trim().slice(0, 100),
|
|
305
|
-
lineNumber: index + 1,
|
|
306
|
-
});
|
|
307
|
-
break; // One finding per line
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
});
|
|
311
|
-
return findings;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Scan for suspicious code patterns
|
|
315
|
-
* SMI-882: Uses safeRegexTest to prevent ReDoS
|
|
316
|
-
*/
|
|
317
|
-
scanSuspiciousPatterns(content) {
|
|
318
|
-
const findings = [];
|
|
319
|
-
const lines = content.split('\n');
|
|
320
|
-
lines.forEach((line, index) => {
|
|
321
|
-
for (const pattern of SUSPICIOUS_PATTERNS) {
|
|
322
|
-
// SMI-882: Use safe regex test with length limit
|
|
323
|
-
const match = safeRegexTest(pattern, line);
|
|
324
|
-
if (match) {
|
|
325
|
-
findings.push({
|
|
326
|
-
type: 'suspicious_pattern',
|
|
327
|
-
severity: 'medium',
|
|
328
|
-
message: `Suspicious pattern detected: "${match[0]}"`,
|
|
329
|
-
location: line.trim().slice(0, 100),
|
|
330
|
-
lineNumber: index + 1,
|
|
331
|
-
});
|
|
332
|
-
break; // One finding per line
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
// Check custom blocked patterns
|
|
336
|
-
for (const pattern of this.blockedPatterns) {
|
|
337
|
-
// SMI-882: Use safe regex test with length limit
|
|
338
|
-
const match = safeRegexTest(pattern, line);
|
|
339
|
-
if (match) {
|
|
340
|
-
findings.push({
|
|
341
|
-
type: 'suspicious_pattern',
|
|
342
|
-
severity: 'high',
|
|
343
|
-
message: `Blocked pattern detected: "${match[0]}"`,
|
|
344
|
-
location: line.trim().slice(0, 100),
|
|
345
|
-
lineNumber: index + 1,
|
|
346
|
-
});
|
|
347
|
-
break;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
});
|
|
351
|
-
return findings;
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* SMI-685: Scan for social engineering attempts
|
|
355
|
-
* SMI-882: Uses safeRegexTest to prevent ReDoS
|
|
356
|
-
* Detects patterns like "pretend to be", "roleplay as", "you are now"
|
|
357
|
-
*/
|
|
358
|
-
scanSocialEngineering(content) {
|
|
359
|
-
const findings = [];
|
|
360
|
-
const lines = content.split('\n');
|
|
361
|
-
lines.forEach((line, index) => {
|
|
362
|
-
for (const pattern of SOCIAL_ENGINEERING_PATTERNS) {
|
|
363
|
-
// SMI-882: Use safe regex test with length limit
|
|
364
|
-
const match = safeRegexTest(pattern, line);
|
|
365
|
-
if (match) {
|
|
366
|
-
findings.push({
|
|
367
|
-
type: 'social_engineering',
|
|
368
|
-
severity: 'high',
|
|
369
|
-
message: `Social engineering attempt detected: "${match[0]}"`,
|
|
370
|
-
location: line.trim().slice(0, 100),
|
|
371
|
-
lineNumber: index + 1,
|
|
372
|
-
category: 'social_engineering',
|
|
373
|
-
});
|
|
374
|
-
break; // One finding per line
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
return findings;
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* SMI-685: Scan for prompt leaking attempts
|
|
382
|
-
* SMI-882: Uses safeRegexTest to prevent ReDoS
|
|
383
|
-
* Detects patterns like "show me your instructions", "what are your rules"
|
|
384
|
-
*/
|
|
385
|
-
scanPromptLeaking(content) {
|
|
386
|
-
const findings = [];
|
|
387
|
-
const lines = content.split('\n');
|
|
388
|
-
lines.forEach((line, index) => {
|
|
389
|
-
for (const pattern of PROMPT_LEAKING_PATTERNS) {
|
|
390
|
-
// SMI-882: Use safe regex test with length limit
|
|
391
|
-
const match = safeRegexTest(pattern, line);
|
|
392
|
-
if (match) {
|
|
393
|
-
findings.push({
|
|
394
|
-
type: 'prompt_leaking',
|
|
395
|
-
severity: 'critical',
|
|
396
|
-
message: `Prompt leaking attempt detected: "${match[0]}"`,
|
|
397
|
-
location: line.trim().slice(0, 100),
|
|
398
|
-
lineNumber: index + 1,
|
|
399
|
-
category: 'prompt_leaking',
|
|
400
|
-
});
|
|
401
|
-
break; // One finding per line
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
return findings;
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* SMI-685: Scan for data exfiltration patterns
|
|
409
|
-
* SMI-882: Uses safeRegexTest to prevent ReDoS
|
|
410
|
-
* Detects encoding to external URLs, file upload patterns
|
|
411
|
-
*/
|
|
412
|
-
scanDataExfiltration(content) {
|
|
413
|
-
const findings = [];
|
|
414
|
-
const lines = content.split('\n');
|
|
415
|
-
lines.forEach((line, index) => {
|
|
416
|
-
for (const pattern of DATA_EXFILTRATION_PATTERNS) {
|
|
417
|
-
// SMI-882: Use safe regex test with length limit
|
|
418
|
-
const match = safeRegexTest(pattern, line);
|
|
419
|
-
if (match) {
|
|
420
|
-
findings.push({
|
|
421
|
-
type: 'data_exfiltration',
|
|
422
|
-
severity: 'high',
|
|
423
|
-
message: `Potential data exfiltration pattern: "${match[0]}"`,
|
|
424
|
-
location: line.trim().slice(0, 100),
|
|
425
|
-
lineNumber: index + 1,
|
|
426
|
-
category: 'data_exfiltration',
|
|
427
|
-
});
|
|
428
|
-
break; // One finding per line
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
return findings;
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* SMI-685: Scan for privilege escalation patterns
|
|
436
|
-
* SMI-882: Uses safeRegexTest to prevent ReDoS
|
|
437
|
-
* Detects sudo with passwords, chmod patterns, root access attempts
|
|
438
|
-
*/
|
|
439
|
-
scanPrivilegeEscalation(content) {
|
|
440
|
-
const findings = [];
|
|
441
|
-
const lines = content.split('\n');
|
|
442
|
-
lines.forEach((line, index) => {
|
|
443
|
-
for (const pattern of PRIVILEGE_ESCALATION_PATTERNS) {
|
|
444
|
-
// SMI-882: Use safe regex test with length limit
|
|
445
|
-
const match = safeRegexTest(pattern, line);
|
|
446
|
-
if (match) {
|
|
447
|
-
findings.push({
|
|
448
|
-
type: 'privilege_escalation',
|
|
449
|
-
severity: 'critical',
|
|
450
|
-
message: `Privilege escalation pattern detected: "${match[0]}"`,
|
|
451
|
-
location: line.trim().slice(0, 100),
|
|
452
|
-
lineNumber: index + 1,
|
|
453
|
-
category: 'privilege_escalation',
|
|
454
|
-
});
|
|
455
|
-
break; // One finding per line
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
});
|
|
459
|
-
return findings;
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* SMI-685: Calculate risk score from findings
|
|
463
|
-
* Aggregates multiple findings into a risk score from 0-100
|
|
464
|
-
* @param findings - Array of security findings
|
|
465
|
-
* @returns Risk score breakdown and total
|
|
466
|
-
*/
|
|
467
|
-
calculateRiskScore(findings) {
|
|
468
|
-
const breakdown = {
|
|
469
|
-
jailbreak: 0,
|
|
470
|
-
socialEngineering: 0,
|
|
471
|
-
promptLeaking: 0,
|
|
472
|
-
dataExfiltration: 0,
|
|
473
|
-
privilegeEscalation: 0,
|
|
474
|
-
suspiciousCode: 0,
|
|
475
|
-
sensitivePaths: 0,
|
|
476
|
-
externalUrls: 0,
|
|
477
|
-
};
|
|
478
|
-
// Calculate raw scores by category
|
|
479
|
-
for (const finding of findings) {
|
|
480
|
-
const severityWeight = SEVERITY_WEIGHTS[finding.severity];
|
|
481
|
-
const categoryWeight = CATEGORY_WEIGHTS[finding.type] ?? 1.0;
|
|
482
|
-
const score = severityWeight * categoryWeight;
|
|
483
|
-
switch (finding.type) {
|
|
484
|
-
case 'jailbreak':
|
|
485
|
-
breakdown.jailbreak += score;
|
|
486
|
-
break;
|
|
487
|
-
case 'social_engineering':
|
|
488
|
-
breakdown.socialEngineering += score;
|
|
489
|
-
break;
|
|
490
|
-
case 'prompt_leaking':
|
|
491
|
-
breakdown.promptLeaking += score;
|
|
492
|
-
break;
|
|
493
|
-
case 'data_exfiltration':
|
|
494
|
-
breakdown.dataExfiltration += score;
|
|
495
|
-
break;
|
|
496
|
-
case 'privilege_escalation':
|
|
497
|
-
breakdown.privilegeEscalation += score;
|
|
498
|
-
break;
|
|
499
|
-
case 'suspicious_pattern':
|
|
500
|
-
breakdown.suspiciousCode += score;
|
|
501
|
-
break;
|
|
502
|
-
case 'sensitive_path':
|
|
503
|
-
breakdown.sensitivePaths += score;
|
|
504
|
-
break;
|
|
505
|
-
case 'url':
|
|
506
|
-
breakdown.externalUrls += score;
|
|
507
|
-
break;
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
// Cap each category at 100
|
|
511
|
-
breakdown.jailbreak = Math.min(100, breakdown.jailbreak);
|
|
512
|
-
breakdown.socialEngineering = Math.min(100, breakdown.socialEngineering);
|
|
513
|
-
breakdown.promptLeaking = Math.min(100, breakdown.promptLeaking);
|
|
514
|
-
breakdown.dataExfiltration = Math.min(100, breakdown.dataExfiltration);
|
|
515
|
-
breakdown.privilegeEscalation = Math.min(100, breakdown.privilegeEscalation);
|
|
516
|
-
breakdown.suspiciousCode = Math.min(100, breakdown.suspiciousCode);
|
|
517
|
-
breakdown.sensitivePaths = Math.min(100, breakdown.sensitivePaths);
|
|
518
|
-
breakdown.externalUrls = Math.min(100, breakdown.externalUrls);
|
|
519
|
-
// Calculate total as weighted average, capped at 100
|
|
520
|
-
const total = Math.min(100, Math.round(breakdown.jailbreak * 0.25 +
|
|
521
|
-
breakdown.socialEngineering * 0.15 +
|
|
522
|
-
breakdown.promptLeaking * 0.15 +
|
|
523
|
-
breakdown.dataExfiltration * 0.12 +
|
|
524
|
-
breakdown.privilegeEscalation * 0.13 +
|
|
525
|
-
breakdown.suspiciousCode * 0.1 +
|
|
526
|
-
breakdown.sensitivePaths * 0.05 +
|
|
527
|
-
breakdown.externalUrls * 0.05));
|
|
528
|
-
return { total, breakdown };
|
|
529
|
-
}
|
|
530
|
-
/**
|
|
531
|
-
* Perform full security scan
|
|
532
|
-
* SMI-685: Enhanced with new pattern detection and risk scoring
|
|
533
|
-
*/
|
|
534
|
-
scan(skillId, content) {
|
|
535
|
-
const startTime = performance.now();
|
|
536
|
-
const findings = [];
|
|
537
|
-
// Check content length
|
|
538
|
-
if (content.length > this.maxContentLength) {
|
|
539
|
-
findings.push({
|
|
540
|
-
type: 'suspicious_pattern',
|
|
541
|
-
severity: 'low',
|
|
542
|
-
message: `Content exceeds maximum length (${this.maxContentLength} bytes)`,
|
|
543
|
-
});
|
|
544
|
-
}
|
|
545
|
-
// Run all scans (original)
|
|
546
|
-
findings.push(...this.scanUrls(content));
|
|
547
|
-
findings.push(...this.scanSensitivePaths(content));
|
|
548
|
-
findings.push(...this.scanJailbreakPatterns(content));
|
|
549
|
-
findings.push(...this.scanSuspiciousPatterns(content));
|
|
550
|
-
// SMI-685: Run new scans
|
|
551
|
-
findings.push(...this.scanSocialEngineering(content));
|
|
552
|
-
findings.push(...this.scanPromptLeaking(content));
|
|
553
|
-
findings.push(...this.scanDataExfiltration(content));
|
|
554
|
-
findings.push(...this.scanPrivilegeEscalation(content));
|
|
555
|
-
const endTime = performance.now();
|
|
556
|
-
// SMI-685: Calculate risk score
|
|
557
|
-
const { total: riskScore, breakdown: riskBreakdown } = this.calculateRiskScore(findings);
|
|
558
|
-
// Determine if scan passed based on risk threshold and severity
|
|
559
|
-
const hasCritical = findings.some((f) => f.severity === 'critical');
|
|
560
|
-
const hasHigh = findings.some((f) => f.severity === 'high');
|
|
561
|
-
const exceedsThreshold = riskScore >= this.riskThreshold;
|
|
562
|
-
return {
|
|
563
|
-
skillId,
|
|
564
|
-
passed: !hasCritical && !hasHigh && !exceedsThreshold,
|
|
565
|
-
findings,
|
|
566
|
-
scannedAt: new Date(),
|
|
567
|
-
scanDurationMs: endTime - startTime,
|
|
568
|
-
riskScore,
|
|
569
|
-
riskBreakdown,
|
|
570
|
-
};
|
|
571
|
-
}
|
|
572
|
-
/**
|
|
573
|
-
* Quick check without full scan
|
|
574
|
-
* SMI-882: Uses safeRegexCheck to prevent ReDoS
|
|
575
|
-
*/
|
|
576
|
-
quickCheck(content) {
|
|
577
|
-
// Check for critical patterns only
|
|
578
|
-
for (const pattern of JAILBREAK_PATTERNS) {
|
|
579
|
-
// SMI-882: Use safe regex check with length limit
|
|
580
|
-
if (safeRegexCheck(pattern, content))
|
|
581
|
-
return false;
|
|
582
|
-
}
|
|
583
|
-
return true;
|
|
584
|
-
}
|
|
585
|
-
/**
|
|
586
|
-
* Add allowed domain
|
|
587
|
-
*/
|
|
588
|
-
addAllowedDomain(domain) {
|
|
589
|
-
this.allowedDomains.add(domain.toLowerCase());
|
|
590
|
-
}
|
|
591
|
-
/**
|
|
592
|
-
* Add blocked pattern
|
|
593
|
-
*/
|
|
594
|
-
addBlockedPattern(pattern) {
|
|
595
|
-
this.blockedPatterns.push(pattern);
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
export default SecurityScanner;
|
|
599
|
-
//# sourceMappingURL=scanner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/security/scanner.ts"],"names":[],"mappings":"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"}
|