@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
@@ -0,0 +1,36 @@
1
+ import ts from "typescript";
2
+ const SQL_QUERY_METHOD_NAMES = new Set(["query", "execute"]);
3
+ const SQL_RAW_TAG_NAMES = new Set(["$queryRaw", "$executeRaw"]);
4
+ const SQL_KEYWORD_PATTERN = /\b(SELECT|INSERT|UPDATE|DELETE)\b/i;
5
+ export function findRawSqlConcatNodes(sourceFile) {
6
+ const matches = [];
7
+ visitSqlNodes(sourceFile, (node) => {
8
+ if (ts.isCallExpression(node) && isSqlQuerySinkCall(node)) {
9
+ const [firstArgument] = node.arguments;
10
+ if (isInterpolatedSqlTemplate(firstArgument)) {
11
+ matches.push(node);
12
+ }
13
+ return;
14
+ }
15
+ if (ts.isTaggedTemplateExpression(node) && isRawSqlTaggedTemplate(node) && isInterpolatedSqlTemplate(node.template)) {
16
+ matches.push(node);
17
+ }
18
+ });
19
+ return matches;
20
+ }
21
+ function isSqlQuerySinkCall(node) {
22
+ const expression = node.expression;
23
+ return ts.isPropertyAccessExpression(expression) && SQL_QUERY_METHOD_NAMES.has(expression.name.text);
24
+ }
25
+ function isRawSqlTaggedTemplate(node) {
26
+ const tag = node.tag;
27
+ return ts.isPropertyAccessExpression(tag) && SQL_RAW_TAG_NAMES.has(tag.name.text);
28
+ }
29
+ function isInterpolatedSqlTemplate(node) {
30
+ return node !== undefined && ts.isTemplateExpression(node) && SQL_KEYWORD_PATTERN.test(node.getText());
31
+ }
32
+ function visitSqlNodes(node, callback) {
33
+ callback(node);
34
+ ts.forEachChild(node, (child) => visitSqlNodes(child, callback));
35
+ }
36
+ //# sourceMappingURL=sql-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-ast.js","sourceRoot":"","sources":["../src/sql-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAChE,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AAEjE,MAAM,UAAU,qBAAqB,CAAC,UAAyB;IAC7D,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,aAAa,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACvC,IAAI,yBAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAuB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,OAAO,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAiC;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,OAAO,EAAE,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAyB;IAC1D,OAAO,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,aAAa,CAAC,IAAa,EAAE,QAAiC;IACrE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACf,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import ts from "typescript";
2
+ export type XssSeverity = "LOW" | "MEDIUM";
3
+ export type XssAnalysisFacts = {
4
+ sanitizerIdentifiers: ReadonlySet<string>;
5
+ safeHtmlIdentifiers: ReadonlySet<string>;
6
+ };
7
+ export type DangerouslySetInnerHtmlNode = {
8
+ node: ts.JsxAttribute;
9
+ severity: XssSeverity;
10
+ };
11
+ export declare function createXssAnalysisFacts(sourceFile: ts.SourceFile): XssAnalysisFacts;
12
+ export declare function findDangerouslySetInnerHtmlNodes(sourceFile: ts.SourceFile, sanitizerIdentifiers: ReadonlySet<string>, safeHtmlIdentifiers: ReadonlySet<string>): DangerouslySetInnerHtmlNode[];
13
+ //# sourceMappingURL=xss-ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-ast.d.ts","sourceRoot":"","sources":["../src/xss-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,gBAAgB,CAOlF;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,EACzC,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,GACvC,2BAA2B,EAAE,CAe/B"}
@@ -0,0 +1,114 @@
1
+ import ts from "typescript";
2
+ const SANITIZER_MODULE_PATTERN = /^(?:dompurify|sanitize-html)$/i;
3
+ export function createXssAnalysisFacts(sourceFile) {
4
+ const sanitizerIdentifiers = collectSanitizerIdentifiers(sourceFile);
5
+ return {
6
+ sanitizerIdentifiers,
7
+ safeHtmlIdentifiers: collectSafeHtmlIdentifiers(sourceFile, sanitizerIdentifiers)
8
+ };
9
+ }
10
+ export function findDangerouslySetInnerHtmlNodes(sourceFile, sanitizerIdentifiers, safeHtmlIdentifiers) {
11
+ const matches = [];
12
+ visitXssNodes(sourceFile, (node) => {
13
+ if (!ts.isJsxAttribute(node) || !ts.isIdentifier(node.name) || node.name.text !== "dangerouslySetInnerHTML") {
14
+ return;
15
+ }
16
+ const severity = dangerouslySetInnerHtmlSeverity(node.initializer, sanitizerIdentifiers, safeHtmlIdentifiers);
17
+ if (severity) {
18
+ matches.push({ node, severity });
19
+ }
20
+ });
21
+ return matches;
22
+ }
23
+ function dangerouslySetInnerHtmlSeverity(initializer, sanitizerIdentifiers, safeHtmlIdentifiers) {
24
+ if (!initializer || ts.isStringLiteral(initializer)) {
25
+ return undefined;
26
+ }
27
+ if (!ts.isJsxExpression(initializer) || !initializer.expression) {
28
+ return undefined;
29
+ }
30
+ const expression = initializer.expression;
31
+ if (!ts.isObjectLiteralExpression(expression)) {
32
+ return "LOW";
33
+ }
34
+ const htmlExpression = expression.properties
35
+ .filter(ts.isPropertyAssignment)
36
+ .find((property) => propertyNameText(property.name) === "__html")?.initializer;
37
+ if (!htmlExpression || isStaticHtmlExpression(htmlExpression, safeHtmlIdentifiers) || isSanitizedHtmlExpression(htmlExpression, sanitizerIdentifiers)) {
38
+ return undefined;
39
+ }
40
+ return "MEDIUM";
41
+ }
42
+ function collectSanitizerIdentifiers(sourceFile) {
43
+ const sanitizerIdentifiers = new Set();
44
+ visitXssNodes(sourceFile, (node) => {
45
+ if (!ts.isImportDeclaration(node) || !ts.isStringLiteralLike(node.moduleSpecifier)) {
46
+ return;
47
+ }
48
+ const moduleName = node.moduleSpecifier.text;
49
+ const importClause = node.importClause;
50
+ if (!importClause) {
51
+ return;
52
+ }
53
+ if (importClause.name && SANITIZER_MODULE_PATTERN.test(moduleName)) {
54
+ sanitizerIdentifiers.add(importClause.name.text);
55
+ }
56
+ const namedBindings = importClause.namedBindings;
57
+ if (!namedBindings || !ts.isNamedImports(namedBindings)) {
58
+ return;
59
+ }
60
+ for (const importSpecifier of namedBindings.elements) {
61
+ const importedName = importSpecifier.propertyName?.text ?? importSpecifier.name.text;
62
+ if (isSanitizerFunctionName(importedName)) {
63
+ sanitizerIdentifiers.add(importSpecifier.name.text);
64
+ }
65
+ }
66
+ });
67
+ return sanitizerIdentifiers;
68
+ }
69
+ function collectSafeHtmlIdentifiers(sourceFile, sanitizerIdentifiers) {
70
+ const safeHtmlIdentifiers = new Set();
71
+ visitXssNodes(sourceFile, (node) => {
72
+ if (!ts.isVariableStatement(node) || (node.declarationList.flags & ts.NodeFlags.Const) === 0) {
73
+ return;
74
+ }
75
+ for (const declaration of node.declarationList.declarations) {
76
+ if (!ts.isIdentifier(declaration.name) || !declaration.initializer) {
77
+ continue;
78
+ }
79
+ if (isStaticHtmlExpression(declaration.initializer, safeHtmlIdentifiers) || isSanitizedHtmlExpression(declaration.initializer, sanitizerIdentifiers)) {
80
+ safeHtmlIdentifiers.add(declaration.name.text);
81
+ }
82
+ }
83
+ });
84
+ return safeHtmlIdentifiers;
85
+ }
86
+ function propertyNameText(name) {
87
+ if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name)) {
88
+ return name.text;
89
+ }
90
+ return undefined;
91
+ }
92
+ function isStaticHtmlExpression(expression, safeHtmlIdentifiers) {
93
+ return ts.isStringLiteralLike(expression) || ts.isNoSubstitutionTemplateLiteral(expression) || (ts.isIdentifier(expression) && safeHtmlIdentifiers.has(expression.text));
94
+ }
95
+ function isSanitizedHtmlExpression(expression, sanitizerIdentifiers) {
96
+ if (!ts.isCallExpression(expression)) {
97
+ return false;
98
+ }
99
+ if (ts.isIdentifier(expression.expression)) {
100
+ return sanitizerIdentifiers.has(expression.expression.text) || isSanitizerFunctionName(expression.expression.text);
101
+ }
102
+ if (ts.isPropertyAccessExpression(expression.expression)) {
103
+ return isSanitizerFunctionName(expression.expression.name.text);
104
+ }
105
+ return false;
106
+ }
107
+ function isSanitizerFunctionName(name) {
108
+ return /^(?:sanitize|sanitizeHtml|sanitizeMarkdown|sanitizeContent|toSafeHtml)$/i.test(name);
109
+ }
110
+ function visitXssNodes(node, callback) {
111
+ callback(node);
112
+ ts.forEachChild(node, (child) => visitXssNodes(child, callback));
113
+ }
114
+ //# sourceMappingURL=xss-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xss-ast.js","sourceRoot":"","sources":["../src/xss-ast.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-secure-check/rules",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Security rules for next-secure-check",
5
5
  "keywords": [
6
6
  "nextjs",
@@ -16,7 +16,7 @@
16
16
  "license": "MIT",
17
17
  "type": "module",
18
18
  "engines": {
19
- "node": ">=18.0.0"
19
+ "node": ">=20.0.0"
20
20
  },
21
21
  "publishConfig": {
22
22
  "access": "public"
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "typescript": "^5.9.0",
37
- "@next-secure-check/core": "0.3.0"
37
+ "@next-secure-check/core": "0.4.0"
38
38
  },
39
39
  "scripts": {
40
40
  "build": "tsc -p tsconfig.json",