@next-secure-check/rules 0.3.0 → 0.4.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.
Files changed (50) hide show
  1. package/LICENSE +22 -21
  2. package/README.md +1 -1
  3. package/dist/analysis-cache.d.ts +14 -0
  4. package/dist/analysis-cache.d.ts.map +1 -0
  5. package/dist/analysis-cache.js +28 -0
  6. package/dist/analysis-cache.js.map +1 -0
  7. package/dist/ast-utils.d.ts +24 -0
  8. package/dist/ast-utils.d.ts.map +1 -1
  9. package/dist/ast-utils.js +79 -394
  10. package/dist/ast-utils.js.map +1 -1
  11. package/dist/command-ast.d.ts +14 -0
  12. package/dist/command-ast.d.ts.map +1 -0
  13. package/dist/command-ast.js +40 -0
  14. package/dist/command-ast.js.map +1 -0
  15. package/dist/command-discovery.d.ts +8 -0
  16. package/dist/command-discovery.d.ts.map +1 -0
  17. package/dist/command-discovery.js +92 -0
  18. package/dist/command-discovery.js.map +1 -0
  19. package/dist/command-flow.d.ts +9 -0
  20. package/dist/command-flow.d.ts.map +1 -0
  21. package/dist/command-flow.js +377 -0
  22. package/dist/command-flow.js.map +1 -0
  23. package/dist/command-guards.d.ts +4 -0
  24. package/dist/command-guards.d.ts.map +1 -0
  25. package/dist/command-guards.js +92 -0
  26. package/dist/command-guards.js.map +1 -0
  27. package/dist/password-ast.d.ts +4 -0
  28. package/dist/password-ast.d.ts.map +1 -0
  29. package/dist/password-ast.js +102 -0
  30. package/dist/password-ast.js.map +1 -0
  31. package/dist/route-ast.d.ts +8 -0
  32. package/dist/route-ast.d.ts.map +1 -0
  33. package/dist/route-ast.js +165 -0
  34. package/dist/route-ast.js.map +1 -0
  35. package/dist/rule-utils.d.ts +1 -2
  36. package/dist/rule-utils.d.ts.map +1 -1
  37. package/dist/rule-utils.js +1 -13
  38. package/dist/rule-utils.js.map +1 -1
  39. package/dist/security-rules.d.ts.map +1 -1
  40. package/dist/security-rules.js +17 -17
  41. package/dist/security-rules.js.map +1 -1
  42. package/dist/sql-ast.d.ts +3 -0
  43. package/dist/sql-ast.d.ts.map +1 -0
  44. package/dist/sql-ast.js +36 -0
  45. package/dist/sql-ast.js.map +1 -0
  46. package/dist/xss-ast.d.ts +13 -0
  47. package/dist/xss-ast.d.ts.map +1 -0
  48. package/dist/xss-ast.js +114 -0
  49. package/dist/xss-ast.js.map +1 -0
  50. package/package.json +3 -3
package/dist/ast-utils.js CHANGED
@@ -1,425 +1,110 @@
1
1
  import ts from "typescript";
2
- const COMMAND_EXECUTION_NAMES = new Set(["exec", "execSync", "spawn", "spawnSync"]);
3
- const ROUTE_HANDLER_NAMES = new Set(["GET", "POST", "PUT", "DELETE", "PATCH"]);
4
- const SQL_QUERY_METHOD_NAMES = new Set(["query", "execute"]);
5
- const SQL_RAW_TAG_NAMES = new Set(["$queryRaw", "$executeRaw"]);
6
- const SQL_KEYWORD_PATTERN = /\b(SELECT|INSERT|UPDATE|DELETE)\b/i;
7
- const SANITIZER_MODULE_PATTERN = /^(?:dompurify|sanitize-html)$/i;
8
- export function findCommandExecutionMatches(file) {
9
- const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
10
- const commandIdentifiers = new Set();
11
- const childProcessNamespaces = new Set();
12
- const declarationNodes = [];
13
- visit(sourceFile, (node) => {
14
- collectChildProcessImports(node, commandIdentifiers, childProcessNamespaces, declarationNodes);
15
- collectChildProcessRequires(node, commandIdentifiers, childProcessNamespaces, declarationNodes);
2
+ import { SourceAnalysisCache } from "./analysis-cache.js";
3
+ import { collectCommandDiscovery } from "./command-discovery.js";
4
+ import { collectCommandFlowFacts, isAnalyzableCommandExecutionCall } from "./command-flow.js";
5
+ import { findPasswordHandlingNodes, hasPasswordHashingCall } from "./password-ast.js";
6
+ import { findRawSqlConcatNodes } from "./sql-ast.js";
7
+ import { ROUTE_HANDLER_NAMES, exportedRouteHandlerName, hasAuthIntentInSource, hasValidationIntentInSource, isApiRouteFilePath, isUploadHandlingNode } from "./route-ast.js";
8
+ import { createXssAnalysisFacts, findDangerouslySetInnerHtmlNodes } from "./xss-ast.js";
9
+ const analysisFactsCache = new SourceAnalysisCache();
10
+ export function getAnalysisFacts(file) {
11
+ return analysisFactsCache.get(file, () => {
12
+ const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
13
+ return createAnalysisFacts(sourceFile);
16
14
  });
17
- const matches = declarationNodes.map((node) => matchFromNode(file, sourceFile, node));
15
+ }
16
+ export function getAnalysisFactsCacheStats() {
17
+ return analysisFactsCache.stats();
18
+ }
19
+ export function resetAnalysisFactsCacheForTests() {
20
+ analysisFactsCache.clear();
21
+ }
22
+ export function findCommandExecutionMatches(file) {
23
+ const { sourceFile, commandIdentifiers, childProcessNamespaces, commandDeclarationNodes, commandSourcePaths, safeCommandCalls } = getAnalysisFacts(file);
24
+ const matches = commandDeclarationNodes.map((node) => matchFromNode(file, sourceFile, node));
18
25
  visit(sourceFile, (node) => {
19
- if (!ts.isCallExpression(node) || !isCommandExecutionCall(node.expression, commandIdentifiers, childProcessNamespaces)) {
26
+ if (!ts.isCallExpression(node) ||
27
+ safeCommandCalls.has(node) ||
28
+ !isAnalyzableCommandExecutionCall(node, commandIdentifiers, childProcessNamespaces)) {
20
29
  return;
21
30
  }
22
- matches.push(matchFromNode(file, sourceFile, node));
31
+ const match = matchFromNode(file, sourceFile, node);
32
+ const evidencePath = commandSourcePaths.get(node);
33
+ matches.push(evidencePath ? { ...match, evidencePath } : match);
23
34
  });
24
35
  return dedupeMatches(matches);
25
36
  }
26
37
  export function findRawSqlConcatMatches(file) {
27
- const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
28
- const matches = [];
29
- visit(sourceFile, (node) => {
30
- if (ts.isCallExpression(node) && isSqlQuerySinkCall(node)) {
31
- const [firstArgument] = node.arguments;
32
- if (isInterpolatedSqlTemplate(firstArgument)) {
33
- matches.push(matchFromNode(file, sourceFile, node));
34
- }
35
- return;
36
- }
37
- if (ts.isTaggedTemplateExpression(node) && isRawSqlTaggedTemplate(node) && isInterpolatedSqlTemplate(node.template)) {
38
- matches.push(matchFromNode(file, sourceFile, node));
39
- }
40
- });
41
- return dedupeMatches(matches);
38
+ const { sourceFile } = getAnalysisFacts(file);
39
+ return dedupeMatches(findRawSqlConcatNodes(sourceFile).map((node) => matchFromNode(file, sourceFile, node)));
42
40
  }
43
41
  export function findDangerouslySetInnerHtmlMatches(file) {
44
- const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
45
- const sanitizerIdentifiers = collectSanitizerIdentifiers(sourceFile);
46
- const safeHtmlIdentifiers = collectSafeHtmlIdentifiers(sourceFile, sanitizerIdentifiers);
47
- const matches = [];
48
- visit(sourceFile, (node) => {
49
- if (!ts.isJsxAttribute(node) || !ts.isIdentifier(node.name) || node.name.text !== "dangerouslySetInnerHTML") {
50
- return;
51
- }
52
- const severity = dangerouslySetInnerHtmlSeverity(node.initializer, sanitizerIdentifiers, safeHtmlIdentifiers);
53
- if (!severity) {
54
- return;
55
- }
56
- matches.push({
57
- ...matchFromNode(file, sourceFile, node),
58
- severity
59
- });
60
- });
61
- return dedupeMatches(matches);
42
+ const { sourceFile, sanitizerIdentifiers, safeHtmlIdentifiers } = getAnalysisFacts(file);
43
+ return dedupeMatches(findDangerouslySetInnerHtmlNodes(sourceFile, sanitizerIdentifiers, safeHtmlIdentifiers).map(({ node, severity }) => ({
44
+ ...matchFromNode(file, sourceFile, node),
45
+ severity
46
+ })));
62
47
  }
63
48
  export function findPasswordHandlingMatches(file) {
64
- const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
65
- const matches = [];
66
- if (hasPasswordHashingCall(sourceFile)) {
67
- return matches;
49
+ const { sourceFile, hasPasswordHashing } = getAnalysisFacts(file);
50
+ if (hasPasswordHashing) {
51
+ return [];
68
52
  }
69
- visit(sourceFile, (node) => {
70
- if (isPasswordHandlingNode(node)) {
71
- matches.push(matchFromNode(file, sourceFile, node));
72
- }
73
- });
74
- return dedupeMatches(matches);
53
+ return dedupeMatches(findPasswordHandlingNodes(sourceFile).map((node) => matchFromNode(file, sourceFile, node)));
75
54
  }
76
55
  export function findRouteHandlerExports(file) {
77
- const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
78
- const matches = [];
79
- visit(sourceFile, (node) => {
80
- const name = exportedRouteHandlerName(node);
81
- if (name && (name === "DEFAULT" || ROUTE_HANDLER_NAMES.has(name))) {
82
- matches.push(matchFromNode(file, sourceFile, node));
83
- }
84
- });
85
- return dedupeMatches(matches);
56
+ const { sourceFile, routeHandlerNodes } = getAnalysisFacts(file);
57
+ return dedupeMatches(routeHandlerNodes.map((node) => matchFromNode(file, sourceFile, node)));
58
+ }
59
+ export function hasAuthIntentSignal(file) {
60
+ return getAnalysisFacts(file).hasAuthIntent;
61
+ }
62
+ export function hasValidationIntentSignal(file) {
63
+ return getAnalysisFacts(file).hasValidationIntent;
86
64
  }
87
65
  export function findUploadRouteHandlerMatches(file) {
88
66
  if (!isApiRouteFilePath(file.path)) {
89
67
  return [];
90
68
  }
91
- const sourceFile = ts.createSourceFile(file.path, file.content, ts.ScriptTarget.Latest, true, scriptKindForPath(file.path));
92
- const routeHandlerMatches = [];
93
- let hasUploadHandling = false;
94
- visit(sourceFile, (node) => {
69
+ const { sourceFile, routeHandlerNodes, hasUploadHandling } = getAnalysisFacts(file);
70
+ const routeHandlerMatches = routeHandlerNodes
71
+ .filter((node) => {
95
72
  const name = exportedRouteHandlerName(node);
96
- if (name && (name === "DEFAULT" || name === "POST" || name === "PUT" || name === "PATCH")) {
97
- routeHandlerMatches.push(matchFromNode(file, sourceFile, node));
98
- }
99
- if (!hasUploadHandling && isUploadHandlingNode(node)) {
100
- hasUploadHandling = true;
101
- }
102
- });
73
+ return name === "DEFAULT" || name === "POST" || name === "PUT" || name === "PATCH";
74
+ })
75
+ .map((node) => matchFromNode(file, sourceFile, node));
103
76
  return hasUploadHandling ? dedupeMatches(routeHandlerMatches) : [];
104
77
  }
105
- function collectChildProcessImports(node, commandIdentifiers, childProcessNamespaces, declarationNodes) {
106
- if (!ts.isImportDeclaration(node) || !isChildProcessSpecifier(node.moduleSpecifier)) {
107
- return;
108
- }
109
- const importClause = node.importClause;
110
- if (!importClause) {
111
- return;
112
- }
113
- if (importClause.name) {
114
- childProcessNamespaces.add(importClause.name.text);
115
- }
116
- const namedBindings = importClause.namedBindings;
117
- if (namedBindings && ts.isNamespaceImport(namedBindings)) {
118
- childProcessNamespaces.add(namedBindings.name.text);
119
- return;
120
- }
121
- if (!namedBindings || !ts.isNamedImports(namedBindings)) {
122
- return;
123
- }
124
- for (const importSpecifier of namedBindings.elements) {
125
- const importedName = importSpecifier.propertyName?.text ?? importSpecifier.name.text;
126
- if (!COMMAND_EXECUTION_NAMES.has(importedName)) {
127
- continue;
128
- }
129
- commandIdentifiers.add(importSpecifier.name.text);
130
- declarationNodes.push(importSpecifier);
131
- }
132
- }
133
- function collectChildProcessRequires(node, commandIdentifiers, childProcessNamespaces, declarationNodes) {
134
- if (!ts.isVariableDeclaration(node) || !node.initializer) {
135
- return;
136
- }
137
- if (isRequireChildProcessCall(node.initializer)) {
138
- if (ts.isIdentifier(node.name)) {
139
- childProcessNamespaces.add(node.name.text);
140
- return;
141
- }
142
- if (ts.isObjectBindingPattern(node.name)) {
143
- for (const element of node.name.elements) {
144
- const importedName = bindingElementName(element);
145
- const localName = bindingElementLocalName(element);
146
- if (!importedName || !localName || !COMMAND_EXECUTION_NAMES.has(importedName)) {
147
- continue;
148
- }
149
- commandIdentifiers.add(localName);
150
- declarationNodes.push(element);
151
- }
152
- }
153
- return;
154
- }
155
- if (ts.isPropertyAccessExpression(node.initializer) && isRequireChildProcessCall(node.initializer.expression)) {
156
- const importedName = node.initializer.name.text;
157
- if (ts.isIdentifier(node.name) && COMMAND_EXECUTION_NAMES.has(importedName)) {
158
- commandIdentifiers.add(node.name.text);
159
- declarationNodes.push(node);
160
- }
161
- }
162
- }
163
- function isCommandExecutionCall(expression, commandIdentifiers, childProcessNamespaces) {
164
- if (ts.isIdentifier(expression)) {
165
- return commandIdentifiers.has(expression.text);
166
- }
167
- if (!ts.isPropertyAccessExpression(expression) || !COMMAND_EXECUTION_NAMES.has(expression.name.text)) {
168
- return false;
169
- }
170
- return ts.isIdentifier(expression.expression) && childProcessNamespaces.has(expression.expression.text);
171
- }
172
- function isSqlQuerySinkCall(node) {
173
- const expression = node.expression;
174
- return ts.isPropertyAccessExpression(expression) && SQL_QUERY_METHOD_NAMES.has(expression.name.text);
175
- }
176
- function isRawSqlTaggedTemplate(node) {
177
- const tag = node.tag;
178
- return ts.isPropertyAccessExpression(tag) && SQL_RAW_TAG_NAMES.has(tag.name.text);
179
- }
180
- function isInterpolatedSqlTemplate(node) {
181
- return node !== undefined && ts.isTemplateExpression(node) && SQL_KEYWORD_PATTERN.test(node.getText());
182
- }
183
- function dangerouslySetInnerHtmlSeverity(initializer, sanitizerIdentifiers, safeHtmlIdentifiers) {
184
- if (!initializer || ts.isStringLiteral(initializer)) {
185
- return undefined;
186
- }
187
- if (!ts.isJsxExpression(initializer) || !initializer.expression) {
188
- return undefined;
189
- }
190
- const expression = initializer.expression;
191
- if (!ts.isObjectLiteralExpression(expression)) {
192
- return "LOW";
193
- }
194
- const htmlExpression = expression.properties
195
- .filter(ts.isPropertyAssignment)
196
- .find((property) => propertyNameText(property.name) === "__html")?.initializer;
197
- if (!htmlExpression || isStaticHtmlExpression(htmlExpression, safeHtmlIdentifiers) || isSanitizedHtmlExpression(htmlExpression, sanitizerIdentifiers)) {
198
- return undefined;
199
- }
200
- return "MEDIUM";
201
- }
202
- function collectSanitizerIdentifiers(sourceFile) {
203
- const sanitizerIdentifiers = new Set();
204
- visit(sourceFile, (node) => {
205
- if (!ts.isImportDeclaration(node) || !ts.isStringLiteralLike(node.moduleSpecifier)) {
206
- return;
207
- }
208
- const moduleName = node.moduleSpecifier.text;
209
- const importClause = node.importClause;
210
- if (!importClause) {
211
- return;
212
- }
213
- if (importClause.name && SANITIZER_MODULE_PATTERN.test(moduleName)) {
214
- sanitizerIdentifiers.add(importClause.name.text);
215
- }
216
- const namedBindings = importClause.namedBindings;
217
- if (!namedBindings || !ts.isNamedImports(namedBindings)) {
218
- return;
219
- }
220
- for (const importSpecifier of namedBindings.elements) {
221
- const importedName = importSpecifier.propertyName?.text ?? importSpecifier.name.text;
222
- if (isSanitizerFunctionName(importedName)) {
223
- sanitizerIdentifiers.add(importSpecifier.name.text);
224
- }
225
- }
226
- });
227
- return sanitizerIdentifiers;
228
- }
229
- function collectSafeHtmlIdentifiers(sourceFile, sanitizerIdentifiers) {
230
- const safeHtmlIdentifiers = new Set();
78
+ function createAnalysisFacts(sourceFile) {
79
+ const commandDiscovery = collectCommandDiscovery(sourceFile);
80
+ const commandFlow = collectCommandFlowFacts(sourceFile, commandDiscovery.commandIdentifiers, commandDiscovery.childProcessNamespaces);
81
+ const routeHandlerNodes = [];
82
+ let hasUploadHandling = false;
231
83
  visit(sourceFile, (node) => {
232
- if (!ts.isVariableStatement(node) || (node.declarationList.flags & ts.NodeFlags.Const) === 0) {
233
- return;
84
+ const routeName = exportedRouteHandlerName(node);
85
+ if (routeName && (routeName === "DEFAULT" || ROUTE_HANDLER_NAMES.has(routeName))) {
86
+ routeHandlerNodes.push(node);
234
87
  }
235
- for (const declaration of node.declarationList.declarations) {
236
- if (!ts.isIdentifier(declaration.name) || !declaration.initializer) {
237
- continue;
238
- }
239
- if (isStaticHtmlExpression(declaration.initializer, safeHtmlIdentifiers) || isSanitizedHtmlExpression(declaration.initializer, sanitizerIdentifiers)) {
240
- safeHtmlIdentifiers.add(declaration.name.text);
241
- }
242
- }
243
- });
244
- return safeHtmlIdentifiers;
245
- }
246
- function propertyNameText(name) {
247
- if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name)) {
248
- return name.text;
249
- }
250
- return undefined;
251
- }
252
- function isStaticHtmlExpression(expression, safeHtmlIdentifiers) {
253
- return ts.isStringLiteralLike(expression) || ts.isNoSubstitutionTemplateLiteral(expression) || (ts.isIdentifier(expression) && safeHtmlIdentifiers.has(expression.text));
254
- }
255
- function isSanitizedHtmlExpression(expression, sanitizerIdentifiers) {
256
- if (!ts.isCallExpression(expression)) {
257
- return false;
258
- }
259
- if (ts.isIdentifier(expression.expression)) {
260
- return sanitizerIdentifiers.has(expression.expression.text) || isSanitizerFunctionName(expression.expression.text);
261
- }
262
- if (ts.isPropertyAccessExpression(expression.expression)) {
263
- return isSanitizerFunctionName(expression.expression.name.text);
264
- }
265
- return false;
266
- }
267
- function isSanitizerFunctionName(name) {
268
- return /^(?:sanitize|sanitizeHtml|sanitizeMarkdown|sanitizeContent|toSafeHtml)$/i.test(name);
269
- }
270
- function hasPasswordHashingCall(sourceFile) {
271
- let hasHashingCall = false;
272
- visit(sourceFile, (node) => {
273
- if (hasHashingCall || !ts.isCallExpression(node)) {
274
- return;
88
+ if (!hasUploadHandling && isUploadHandlingNode(node)) {
89
+ hasUploadHandling = true;
275
90
  }
276
- hasHashingCall = isPasswordHashingCall(node);
277
91
  });
278
- return hasHashingCall;
279
- }
280
- function isPasswordHashingCall(node) {
281
- const expression = node.expression;
282
- if (ts.isIdentifier(expression)) {
283
- return /^scrypt(?:Sync)?$/i.test(expression.text);
284
- }
285
- if (!ts.isPropertyAccessExpression(expression)) {
286
- return false;
287
- }
288
- const methodName = expression.name.text;
289
- const targetName = expressionNameText(expression.expression);
290
- if (/^scrypt(?:Sync)?$/i.test(methodName) && targetName === "crypto") {
291
- return true;
292
- }
293
- return methodName === "hash" && (targetName === "bcrypt" || targetName === "argon2");
294
- }
295
- function isPasswordHandlingNode(node) {
296
- if (ts.isVariableDeclaration(node)) {
297
- return isPasswordVariableDeclaration(node);
298
- }
299
- return (ts.isPropertyAccessExpression(node) &&
300
- node.name.text === "password" &&
301
- isRequestBodyExpression(node.expression) &&
302
- !isVariableDeclarationInitializer(node));
303
- }
304
- function isPasswordVariableDeclaration(node) {
305
- if (!node.initializer) {
306
- return false;
307
- }
308
- if (ts.isIdentifier(node.name) && node.name.text === "password") {
309
- return isPasswordSourceExpression(node.initializer);
310
- }
311
- if (!ts.isObjectBindingPattern(node.name)) {
312
- return false;
313
- }
314
- return node.name.elements.some((element) => bindingElementName(element) === "password") && isCredentialJsonExpression(node.initializer);
315
- }
316
- function isPasswordSourceExpression(expression) {
317
- return isPasswordPropertyAccess(expression) || isPasswordFormDataGetCall(expression);
318
- }
319
- function isPasswordPropertyAccess(expression) {
320
- return ts.isPropertyAccessExpression(expression) && expression.name.text === "password" && isCredentialContainerExpression(expression.expression);
321
- }
322
- function isPasswordFormDataGetCall(expression) {
323
- if (!ts.isCallExpression(expression) || !ts.isPropertyAccessExpression(expression.expression) || expression.expression.name.text !== "get") {
324
- return false;
325
- }
326
- const [fieldName] = expression.arguments;
327
- return fieldName !== undefined && ts.isStringLiteralLike(fieldName) && fieldName.text === "password";
328
- }
329
- function isVariableDeclarationInitializer(expression) {
330
- return ts.isVariableDeclaration(expression.parent) && expression.parent.initializer === expression;
331
- }
332
- function isCredentialContainerExpression(expression) {
333
- return isRequestBodyExpression(expression) || isCredentialLikeIdentifier(expression);
334
- }
335
- function isRequestBodyExpression(expression) {
336
- return ((ts.isIdentifier(expression) && /^(body|credentials|credential|data|payload|formData)$/i.test(expression.text)) ||
337
- (ts.isPropertyAccessExpression(expression) &&
338
- expression.name.text === "body" &&
339
- ts.isIdentifier(expression.expression) &&
340
- /^(req|request)$/i.test(expression.expression.text)));
341
- }
342
- function isCredentialJsonExpression(expression) {
343
- const unwrappedExpression = ts.isAwaitExpression(expression) ? expression.expression : expression;
344
- return (ts.isCallExpression(unwrappedExpression) &&
345
- ts.isPropertyAccessExpression(unwrappedExpression.expression) &&
346
- unwrappedExpression.expression.name.text === "json" &&
347
- ts.isIdentifier(unwrappedExpression.expression.expression) &&
348
- /^(request|req)$/i.test(unwrappedExpression.expression.expression.text));
349
- }
350
- function isCredentialLikeIdentifier(expression) {
351
- return ts.isIdentifier(expression) && /^(credentials?|user|account)$/i.test(expression.text);
352
- }
353
- function expressionNameText(expression) {
354
- return ts.isIdentifier(expression) ? expression.text : undefined;
355
- }
356
- function exportedRouteHandlerName(node) {
357
- if (ts.isFunctionDeclaration(node) && hasDefaultExportModifier(node)) {
358
- return "DEFAULT";
359
- }
360
- if (ts.isFunctionDeclaration(node) && hasExportModifier(node) && node.name) {
361
- return node.name.text;
362
- }
363
- if (!ts.isVariableStatement(node) || !hasExportModifier(node)) {
364
- return undefined;
365
- }
366
- const [declaration] = node.declarationList.declarations;
367
- return declaration && ts.isIdentifier(declaration.name) ? declaration.name.text : undefined;
368
- }
369
- function hasExportModifier(node) {
370
- return ts.canHaveModifiers(node) && (ts.getModifiers(node) ?? []).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword);
371
- }
372
- function hasDefaultExportModifier(node) {
373
- const modifiers = ts.canHaveModifiers(node) ? (ts.getModifiers(node) ?? []) : [];
374
- return (modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) &&
375
- modifiers.some((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword));
376
- }
377
- function isApiRouteFilePath(filePath) {
378
- const normalizedPath = filePath.replace(/\\/g, "/");
379
- return (/^app\/api\/.*\/route\.[tj]s$/i.test(normalizedPath) ||
380
- /^src\/app\/api\/.*\/route\.[tj]s$/i.test(normalizedPath) ||
381
- /^pages\/api\/.*\.([tj]s)$/i.test(normalizedPath) ||
382
- /^apps\/[^/]+\/app\/api\/.*\/route\.[tj]s$/i.test(normalizedPath) ||
383
- /^apps\/[^/]+\/src\/app\/api\/.*\/route\.[tj]s$/i.test(normalizedPath) ||
384
- /^apps\/[^/]+\/pages\/api\/.*\.([tj]s)$/i.test(normalizedPath));
385
- }
386
- function isUploadHandlingNode(node) {
387
- if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
388
- const methodName = node.expression.name.text;
389
- if (methodName === "formData") {
390
- return true;
391
- }
392
- if (methodName === "get") {
393
- const [fieldName] = node.arguments;
394
- return fieldName !== undefined && ts.isStringLiteralLike(fieldName) && /^(file|files|blob|image|avatar|media)$/i.test(fieldName.text);
395
- }
396
- }
397
- if (ts.isIdentifier(node)) {
398
- return /^(file|files|blob|formData)$/i.test(node.text);
399
- }
400
- if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName)) {
401
- return /^(File|Blob|FormData)$/i.test(node.typeName.text);
402
- }
403
- return false;
404
- }
405
- function isRequireChildProcessCall(node) {
406
- if (!ts.isCallExpression(node) || !ts.isIdentifier(node.expression) || node.expression.text !== "require") {
407
- return false;
408
- }
409
- const [specifier] = node.arguments;
410
- return isChildProcessSpecifier(specifier);
411
- }
412
- function isChildProcessSpecifier(node) {
413
- return node !== undefined && ts.isStringLiteralLike(node) && /^(?:node:)?child_process$/.test(node.text);
414
- }
415
- function bindingElementName(element) {
416
- if (element.propertyName) {
417
- return ts.isIdentifier(element.propertyName) || ts.isStringLiteralLike(element.propertyName) ? element.propertyName.text : undefined;
418
- }
419
- return ts.isIdentifier(element.name) ? element.name.text : undefined;
420
- }
421
- function bindingElementLocalName(element) {
422
- return ts.isIdentifier(element.name) ? element.name.text : undefined;
92
+ const xssFacts = createXssAnalysisFacts(sourceFile);
93
+ return {
94
+ sourceFile,
95
+ commandIdentifiers: commandDiscovery.commandIdentifiers,
96
+ childProcessNamespaces: commandDiscovery.childProcessNamespaces,
97
+ commandDeclarationNodes: commandDiscovery.commandDeclarationNodes,
98
+ commandSourcePaths: commandFlow.sourcePaths,
99
+ safeCommandCalls: commandFlow.safeCommandCalls,
100
+ routeHandlerNodes,
101
+ sanitizerIdentifiers: xssFacts.sanitizerIdentifiers,
102
+ safeHtmlIdentifiers: xssFacts.safeHtmlIdentifiers,
103
+ hasPasswordHashing: hasPasswordHashingCall(sourceFile),
104
+ hasAuthIntent: hasAuthIntentInSource(sourceFile),
105
+ hasValidationIntent: hasValidationIntentInSource(sourceFile),
106
+ hasUploadHandling
107
+ };
423
108
  }
424
109
  function matchFromNode(file, sourceFile, node) {
425
110
  const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
@@ -1 +1 @@
1
- {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../src/ast-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../src/ast-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import ts from "typescript";
2
+ export declare const COMMAND_EXECUTION_NAMES: Set<string>;
3
+ export declare const COMMAND_ALIAS_LIMIT = 2;
4
+ export declare const REQUEST_SOURCE_NAMES: RegExp;
5
+ export declare const ROUTE_PARAMS_NAMES: RegExp;
6
+ export declare const SEARCH_PARAMS_NAME: RegExp;
7
+ export declare function isCommandExecutionCall(expression: ts.Expression, commandIdentifiers: ReadonlySet<string>, childProcessNamespaces: ReadonlySet<string>): boolean;
8
+ export declare function commandExecutionName(expression: ts.Expression): string | undefined;
9
+ export declare function isCommandMutationOperator(operator: ts.PrefixUnaryOperator | ts.PostfixUnaryOperator): boolean;
10
+ export declare function isCommandAssignmentOperator(kind: ts.SyntaxKind): boolean;
11
+ export declare function isChildProcessSpecifier(node: ts.Node | undefined): boolean;
12
+ export declare function bindingElementName(element: ts.BindingElement): string | undefined;
13
+ export declare function bindingElementLocalName(element: ts.BindingElement): string | undefined;
14
+ //# sourceMappingURL=command-ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-ast.d.ts","sourceRoot":"","sources":["../src/command-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,eAAO,MAAM,uBAAuB,aAAsD,CAAC;AAC3F,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,oBAAoB,QAAuB,CAAC;AACzD,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAAoB,CAAC;AAEpD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,EACvC,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1C,OAAO,CAUT;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAMlF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,oBAAoB,GAAG,OAAO,CAE7G;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAExE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,GAAG,OAAO,CAE1E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,GAAG,MAAM,GAAG,SAAS,CAMjF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,GAAG,MAAM,GAAG,SAAS,CAEtF"}
@@ -0,0 +1,40 @@
1
+ import ts from "typescript";
2
+ export const COMMAND_EXECUTION_NAMES = new Set(["exec", "execSync", "spawn", "spawnSync"]);
3
+ export const COMMAND_ALIAS_LIMIT = 2;
4
+ export const REQUEST_SOURCE_NAMES = /^(?:req|request)$/i;
5
+ export const ROUTE_PARAMS_NAMES = /^(?:params|routeParams)$/i;
6
+ export const SEARCH_PARAMS_NAME = /^searchParams$/i;
7
+ export function isCommandExecutionCall(expression, commandIdentifiers, childProcessNamespaces) {
8
+ if (ts.isIdentifier(expression)) {
9
+ return commandIdentifiers.has(expression.text);
10
+ }
11
+ if (!ts.isPropertyAccessExpression(expression) || !COMMAND_EXECUTION_NAMES.has(expression.name.text)) {
12
+ return false;
13
+ }
14
+ return ts.isIdentifier(expression.expression) && childProcessNamespaces.has(expression.expression.text);
15
+ }
16
+ export function commandExecutionName(expression) {
17
+ if (ts.isIdentifier(expression)) {
18
+ return expression.text;
19
+ }
20
+ return ts.isPropertyAccessExpression(expression) ? expression.name.text : undefined;
21
+ }
22
+ export function isCommandMutationOperator(operator) {
23
+ return operator === ts.SyntaxKind.PlusPlusToken || operator === ts.SyntaxKind.MinusMinusToken;
24
+ }
25
+ export function isCommandAssignmentOperator(kind) {
26
+ return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;
27
+ }
28
+ export function isChildProcessSpecifier(node) {
29
+ return node !== undefined && ts.isStringLiteralLike(node) && /^(?:node:)?child_process$/.test(node.text);
30
+ }
31
+ export function bindingElementName(element) {
32
+ if (element.propertyName) {
33
+ return ts.isIdentifier(element.propertyName) || ts.isStringLiteralLike(element.propertyName) ? element.propertyName.text : undefined;
34
+ }
35
+ return ts.isIdentifier(element.name) ? element.name.text : undefined;
36
+ }
37
+ export function bindingElementLocalName(element) {
38
+ return ts.isIdentifier(element.name) ? element.name.text : undefined;
39
+ }
40
+ //# sourceMappingURL=command-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-ast.js","sourceRoot":"","sources":["../src/command-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAEpD,MAAM,UAAU,sBAAsB,CACpC,UAAyB,EACzB,kBAAuC,EACvC,sBAA2C;IAE3C,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrG,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAyB;IAC5D,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAA0D;IAClG,OAAO,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,IAAI,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAmB;IAC7D,OAAO,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,IAAI,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAyB;IAC/D,OAAO,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvI,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import ts from "typescript";
2
+ export type CommandDiscoveryFacts = {
3
+ commandIdentifiers: Set<string>;
4
+ childProcessNamespaces: Set<string>;
5
+ commandDeclarationNodes: ts.Node[];
6
+ };
7
+ export declare function collectCommandDiscovery(sourceFile: ts.SourceFile): CommandDiscoveryFacts;
8
+ //# sourceMappingURL=command-discovery.d.ts.map