eslint-plugin-secure-coding 2.3.2 → 2.3.3
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 +1 -0
- package/package.json +3 -10
- package/src/index.ts +605 -0
- package/src/rules/__tests__/integration-demo.test.ts +290 -0
- package/src/rules/__tests__/integration-llm.test.ts +89 -0
- package/src/rules/database-injection/database-injection.test.ts +456 -0
- package/src/rules/database-injection/index.ts +488 -0
- package/src/rules/detect-child-process/detect-child-process.test.ts +207 -0
- package/src/rules/detect-child-process/index.ts +634 -0
- package/src/rules/detect-eval-with-expression/detect-eval-with-expression.test.ts +416 -0
- package/src/rules/detect-eval-with-expression/index.ts +463 -0
- package/src/rules/detect-mixed-content/detect-mixed-content.test.ts +28 -0
- package/src/rules/detect-mixed-content/index.ts +52 -0
- package/src/rules/detect-non-literal-fs-filename/detect-non-literal-fs-filename.test.ts +269 -0
- package/src/rules/detect-non-literal-fs-filename/index.ts +551 -0
- package/src/rules/detect-non-literal-regexp/detect-non-literal-regexp.test.ts +189 -0
- package/src/rules/detect-non-literal-regexp/index.ts +490 -0
- package/src/rules/detect-object-injection/detect-object-injection.test.ts +440 -0
- package/src/rules/detect-object-injection/index.ts +674 -0
- package/src/rules/detect-suspicious-dependencies/detect-suspicious-dependencies.test.ts +32 -0
- package/src/rules/detect-suspicious-dependencies/index.ts +84 -0
- package/src/rules/detect-weak-password-validation/detect-weak-password-validation.test.ts +31 -0
- package/src/rules/detect-weak-password-validation/index.ts +68 -0
- package/src/rules/no-allow-arbitrary-loads/index.ts +54 -0
- package/src/rules/no-allow-arbitrary-loads/no-allow-arbitrary-loads.test.ts +28 -0
- package/src/rules/no-arbitrary-file-access/index.ts +238 -0
- package/src/rules/no-arbitrary-file-access/no-arbitrary-file-access.test.ts +119 -0
- package/src/rules/no-buffer-overread/index.ts +724 -0
- package/src/rules/no-buffer-overread/no-buffer-overread.test.ts +313 -0
- package/src/rules/no-clickjacking/index.ts +481 -0
- package/src/rules/no-clickjacking/no-clickjacking.test.ts +253 -0
- package/src/rules/no-client-side-auth-logic/index.ts +81 -0
- package/src/rules/no-client-side-auth-logic/no-client-side-auth-logic.test.ts +33 -0
- package/src/rules/no-credentials-in-query-params/index.ts +69 -0
- package/src/rules/no-credentials-in-query-params/no-credentials-in-query-params.test.ts +33 -0
- package/src/rules/no-credentials-in-storage-api/index.ts +64 -0
- package/src/rules/no-credentials-in-storage-api/no-credentials-in-storage-api.test.ts +31 -0
- package/src/rules/no-data-in-temp-storage/index.ts +75 -0
- package/src/rules/no-data-in-temp-storage/no-data-in-temp-storage.test.ts +33 -0
- package/src/rules/no-debug-code-in-production/index.ts +59 -0
- package/src/rules/no-debug-code-in-production/no-debug-code-in-production.test.ts +26 -0
- package/src/rules/no-directive-injection/index.ts +551 -0
- package/src/rules/no-directive-injection/no-directive-injection.test.ts +305 -0
- package/src/rules/no-disabled-certificate-validation/index.ts +72 -0
- package/src/rules/no-disabled-certificate-validation/no-disabled-certificate-validation.test.ts +33 -0
- package/src/rules/no-document-cookie/index.ts +113 -0
- package/src/rules/no-document-cookie/no-document-cookie.test.ts +382 -0
- package/src/rules/no-dynamic-dependency-loading/index.ts +60 -0
- package/src/rules/no-dynamic-dependency-loading/no-dynamic-dependency-loading.test.ts +27 -0
- package/src/rules/no-electron-security-issues/index.ts +504 -0
- package/src/rules/no-electron-security-issues/no-electron-security-issues.test.ts +324 -0
- package/src/rules/no-exposed-debug-endpoints/index.ts +73 -0
- package/src/rules/no-exposed-debug-endpoints/no-exposed-debug-endpoints.test.ts +40 -0
- package/src/rules/no-exposed-sensitive-data/index.ts +428 -0
- package/src/rules/no-exposed-sensitive-data/no-exposed-sensitive-data.test.ts +75 -0
- package/src/rules/no-format-string-injection/index.ts +801 -0
- package/src/rules/no-format-string-injection/no-format-string-injection.test.ts +437 -0
- package/src/rules/no-graphql-injection/index.ts +508 -0
- package/src/rules/no-graphql-injection/no-graphql-injection.test.ts +371 -0
- package/src/rules/no-hardcoded-credentials/index.ts +478 -0
- package/src/rules/no-hardcoded-credentials/no-hardcoded-credentials.test.ts +639 -0
- package/src/rules/no-hardcoded-session-tokens/index.ts +69 -0
- package/src/rules/no-hardcoded-session-tokens/no-hardcoded-session-tokens.test.ts +42 -0
- package/src/rules/no-http-urls/index.ts +131 -0
- package/src/rules/no-http-urls/no-http-urls.test.ts +60 -0
- package/src/rules/no-improper-sanitization/index.ts +502 -0
- package/src/rules/no-improper-sanitization/no-improper-sanitization.test.ts +156 -0
- package/src/rules/no-improper-type-validation/index.ts +572 -0
- package/src/rules/no-improper-type-validation/no-improper-type-validation.test.ts +372 -0
- package/src/rules/no-insecure-comparison/index.ts +232 -0
- package/src/rules/no-insecure-comparison/no-insecure-comparison.test.ts +218 -0
- package/src/rules/no-insecure-cookie-settings/index.ts +391 -0
- package/src/rules/no-insecure-cookie-settings/no-insecure-cookie-settings.test.ts +409 -0
- package/src/rules/no-insecure-jwt/index.ts +467 -0
- package/src/rules/no-insecure-jwt/no-insecure-jwt.test.ts +259 -0
- package/src/rules/no-insecure-redirects/index.ts +267 -0
- package/src/rules/no-insecure-redirects/no-insecure-redirects.test.ts +108 -0
- package/src/rules/no-insecure-websocket/index.ts +72 -0
- package/src/rules/no-insecure-websocket/no-insecure-websocket.test.ts +42 -0
- package/src/rules/no-insufficient-postmessage-validation/index.ts +497 -0
- package/src/rules/no-insufficient-postmessage-validation/no-insufficient-postmessage-validation.test.ts +360 -0
- package/src/rules/no-insufficient-random/index.ts +288 -0
- package/src/rules/no-insufficient-random/no-insufficient-random.test.ts +246 -0
- package/src/rules/no-ldap-injection/index.ts +547 -0
- package/src/rules/no-ldap-injection/no-ldap-injection.test.ts +317 -0
- package/src/rules/no-missing-authentication/index.ts +408 -0
- package/src/rules/no-missing-authentication/no-missing-authentication.test.ts +350 -0
- package/src/rules/no-missing-cors-check/index.ts +453 -0
- package/src/rules/no-missing-cors-check/no-missing-cors-check.test.ts +392 -0
- package/src/rules/no-missing-csrf-protection/index.ts +229 -0
- package/src/rules/no-missing-csrf-protection/no-missing-csrf-protection.test.ts +222 -0
- package/src/rules/no-missing-security-headers/index.ts +266 -0
- package/src/rules/no-missing-security-headers/no-missing-security-headers.test.ts +98 -0
- package/src/rules/no-password-in-url/index.ts +64 -0
- package/src/rules/no-password-in-url/no-password-in-url.test.ts +27 -0
- package/src/rules/no-permissive-cors/index.ts +78 -0
- package/src/rules/no-permissive-cors/no-permissive-cors.test.ts +28 -0
- package/src/rules/no-pii-in-logs/index.ts +83 -0
- package/src/rules/no-pii-in-logs/no-pii-in-logs.test.ts +26 -0
- package/src/rules/no-postmessage-origin-wildcard/index.ts +67 -0
- package/src/rules/no-postmessage-origin-wildcard/no-postmessage-origin-wildcard.test.ts +27 -0
- package/src/rules/no-privilege-escalation/index.ts +403 -0
- package/src/rules/no-privilege-escalation/no-privilege-escalation.test.ts +306 -0
- package/src/rules/no-redos-vulnerable-regex/index.ts +379 -0
- package/src/rules/no-redos-vulnerable-regex/no-redos-vulnerable-regex.test.ts +83 -0
- package/src/rules/no-sensitive-data-exposure/index.ts +294 -0
- package/src/rules/no-sensitive-data-exposure/no-sensitive-data-exposure.test.ts +262 -0
- package/src/rules/no-sensitive-data-in-analytics/index.ts +73 -0
- package/src/rules/no-sensitive-data-in-analytics/no-sensitive-data-in-analytics.test.ts +42 -0
- package/src/rules/no-sensitive-data-in-cache/index.ts +59 -0
- package/src/rules/no-sensitive-data-in-cache/no-sensitive-data-in-cache.test.ts +32 -0
- package/src/rules/no-sql-injection/index.ts +424 -0
- package/src/rules/no-sql-injection/no-sql-injection.test.ts +303 -0
- package/src/rules/no-timing-attack/index.ts +552 -0
- package/src/rules/no-timing-attack/no-timing-attack.test.ts +348 -0
- package/src/rules/no-toctou-vulnerability/index.ts +250 -0
- package/src/rules/no-toctou-vulnerability/no-toctou-vulnerability.test.ts +60 -0
- package/src/rules/no-tracking-without-consent/index.ts +78 -0
- package/src/rules/no-tracking-without-consent/no-tracking-without-consent.test.ts +34 -0
- package/src/rules/no-unchecked-loop-condition/index.ts +781 -0
- package/src/rules/no-unchecked-loop-condition/no-unchecked-loop-condition.test.ts +459 -0
- package/src/rules/no-unencrypted-local-storage/index.ts +73 -0
- package/src/rules/no-unencrypted-local-storage/no-unencrypted-local-storage.test.ts +41 -0
- package/src/rules/no-unencrypted-transmission/index.ts +296 -0
- package/src/rules/no-unencrypted-transmission/no-unencrypted-transmission.test.ts +287 -0
- package/src/rules/no-unescaped-url-parameter/index.ts +424 -0
- package/src/rules/no-unescaped-url-parameter/no-unescaped-url-parameter.test.ts +263 -0
- package/src/rules/no-unlimited-resource-allocation/index.ts +767 -0
- package/src/rules/no-unlimited-resource-allocation/no-unlimited-resource-allocation.test.ts +544 -0
- package/src/rules/no-unsafe-deserialization/index.ts +593 -0
- package/src/rules/no-unsafe-deserialization/no-unsafe-deserialization.test.ts +310 -0
- package/src/rules/no-unsafe-dynamic-require/index.ts +125 -0
- package/src/rules/no-unsafe-dynamic-require/no-unsafe-dynamic-require.test.ts +151 -0
- package/src/rules/no-unsafe-regex-construction/index.ts +370 -0
- package/src/rules/no-unsafe-regex-construction/no-unsafe-regex-construction.test.ts +181 -0
- package/src/rules/no-unsanitized-html/index.ts +400 -0
- package/src/rules/no-unsanitized-html/no-unsanitized-html.test.ts +488 -0
- package/src/rules/no-unvalidated-deeplinks/index.ts +73 -0
- package/src/rules/no-unvalidated-deeplinks/no-unvalidated-deeplinks.test.ts +29 -0
- package/src/rules/no-unvalidated-user-input/index.ts +498 -0
- package/src/rules/no-unvalidated-user-input/no-unvalidated-user-input.test.ts +463 -0
- package/src/rules/no-verbose-error-messages/index.ts +83 -0
- package/src/rules/no-verbose-error-messages/no-verbose-error-messages.test.ts +34 -0
- package/src/rules/no-weak-crypto/index.ts +447 -0
- package/src/rules/no-weak-crypto/no-weak-crypto.test.ts +297 -0
- package/src/rules/no-weak-password-recovery/index.ts +509 -0
- package/src/rules/no-weak-password-recovery/no-weak-password-recovery.test.ts +184 -0
- package/src/rules/no-xpath-injection/index.ts +596 -0
- package/src/rules/no-xpath-injection/no-xpath-injection.test.ts +405 -0
- package/src/rules/no-xxe-injection/index.ts +342 -0
- package/src/rules/no-xxe-injection/no-xxe-injection.test.ts +122 -0
- package/src/rules/no-zip-slip/index.ts +526 -0
- package/src/rules/no-zip-slip/no-zip-slip.test.ts +305 -0
- package/src/rules/require-backend-authorization/index.ts +71 -0
- package/src/rules/require-backend-authorization/require-backend-authorization.test.ts +31 -0
- package/src/rules/require-code-minification/index.ts +54 -0
- package/src/rules/require-code-minification/require-code-minification.test.ts +30 -0
- package/src/rules/require-csp-headers/index.ts +74 -0
- package/src/rules/require-csp-headers/require-csp-headers.test.ts +34 -0
- package/src/rules/require-data-minimization/index.ts +65 -0
- package/src/rules/require-data-minimization/require-data-minimization.test.ts +31 -0
- package/src/rules/require-dependency-integrity/index.ts +78 -0
- package/src/rules/require-dependency-integrity/require-dependency-integrity.test.ts +44 -0
- package/src/rules/require-https-only/index.ts +75 -0
- package/src/rules/require-https-only/require-https-only.test.ts +26 -0
- package/src/rules/require-mime-type-validation/index.ts +77 -0
- package/src/rules/require-mime-type-validation/require-mime-type-validation.test.ts +32 -0
- package/src/rules/require-network-timeout/index.ts +58 -0
- package/src/rules/require-network-timeout/require-network-timeout.test.ts +26 -0
- package/src/rules/require-package-lock/index.ts +75 -0
- package/src/rules/require-package-lock/require-package-lock.test.ts +27 -0
- package/src/rules/require-secure-credential-storage/index.ts +60 -0
- package/src/rules/require-secure-credential-storage/require-secure-credential-storage.test.ts +26 -0
- package/src/rules/require-secure-defaults/index.ts +54 -0
- package/src/rules/require-secure-defaults/require-secure-defaults.test.ts +26 -0
- package/src/rules/require-secure-deletion/index.ts +52 -0
- package/src/rules/require-secure-deletion/require-secure-deletion.test.ts +29 -0
- package/src/rules/require-storage-encryption/index.ts +60 -0
- package/src/rules/require-storage-encryption/require-storage-encryption.test.ts +26 -0
- package/src/rules/require-url-validation/index.ts +85 -0
- package/src/rules/require-url-validation/require-url-validation.test.ts +32 -0
- package/src/types/{index.d.ts → index.ts} +157 -53
- package/src/index.d.ts +0 -32
- package/src/index.js +0 -465
- package/src/rules/database-injection/index.d.ts +0 -13
- package/src/rules/database-injection/index.js +0 -406
- package/src/rules/detect-child-process/index.d.ts +0 -11
- package/src/rules/detect-child-process/index.js +0 -529
- package/src/rules/detect-eval-with-expression/index.d.ts +0 -9
- package/src/rules/detect-eval-with-expression/index.js +0 -392
- package/src/rules/detect-mixed-content/index.d.ts +0 -8
- package/src/rules/detect-mixed-content/index.js +0 -44
- package/src/rules/detect-non-literal-fs-filename/index.d.ts +0 -7
- package/src/rules/detect-non-literal-fs-filename/index.js +0 -454
- package/src/rules/detect-non-literal-regexp/index.d.ts +0 -9
- package/src/rules/detect-non-literal-regexp/index.js +0 -403
- package/src/rules/detect-object-injection/index.d.ts +0 -11
- package/src/rules/detect-object-injection/index.js +0 -560
- package/src/rules/detect-suspicious-dependencies/index.d.ts +0 -8
- package/src/rules/detect-suspicious-dependencies/index.js +0 -71
- package/src/rules/detect-weak-password-validation/index.d.ts +0 -6
- package/src/rules/detect-weak-password-validation/index.js +0 -58
- package/src/rules/no-allow-arbitrary-loads/index.d.ts +0 -8
- package/src/rules/no-allow-arbitrary-loads/index.js +0 -47
- package/src/rules/no-arbitrary-file-access/index.d.ts +0 -13
- package/src/rules/no-arbitrary-file-access/index.js +0 -195
- package/src/rules/no-buffer-overread/index.d.ts +0 -29
- package/src/rules/no-buffer-overread/index.js +0 -606
- package/src/rules/no-clickjacking/index.d.ts +0 -10
- package/src/rules/no-clickjacking/index.js +0 -396
- package/src/rules/no-client-side-auth-logic/index.d.ts +0 -6
- package/src/rules/no-client-side-auth-logic/index.js +0 -69
- package/src/rules/no-credentials-in-query-params/index.d.ts +0 -8
- package/src/rules/no-credentials-in-query-params/index.js +0 -57
- package/src/rules/no-credentials-in-storage-api/index.d.ts +0 -6
- package/src/rules/no-credentials-in-storage-api/index.js +0 -54
- package/src/rules/no-data-in-temp-storage/index.d.ts +0 -6
- package/src/rules/no-data-in-temp-storage/index.js +0 -64
- package/src/rules/no-debug-code-in-production/index.d.ts +0 -8
- package/src/rules/no-debug-code-in-production/index.js +0 -51
- package/src/rules/no-directive-injection/index.d.ts +0 -12
- package/src/rules/no-directive-injection/index.js +0 -457
- package/src/rules/no-disabled-certificate-validation/index.d.ts +0 -6
- package/src/rules/no-disabled-certificate-validation/index.js +0 -61
- package/src/rules/no-document-cookie/index.d.ts +0 -5
- package/src/rules/no-document-cookie/index.js +0 -89
- package/src/rules/no-dynamic-dependency-loading/index.d.ts +0 -8
- package/src/rules/no-dynamic-dependency-loading/index.js +0 -51
- package/src/rules/no-electron-security-issues/index.d.ts +0 -10
- package/src/rules/no-electron-security-issues/index.js +0 -423
- package/src/rules/no-exposed-debug-endpoints/index.d.ts +0 -6
- package/src/rules/no-exposed-debug-endpoints/index.js +0 -62
- package/src/rules/no-exposed-sensitive-data/index.d.ts +0 -11
- package/src/rules/no-exposed-sensitive-data/index.js +0 -340
- package/src/rules/no-format-string-injection/index.d.ts +0 -17
- package/src/rules/no-format-string-injection/index.js +0 -660
- package/src/rules/no-graphql-injection/index.d.ts +0 -12
- package/src/rules/no-graphql-injection/index.js +0 -411
- package/src/rules/no-hardcoded-credentials/index.d.ts +0 -26
- package/src/rules/no-hardcoded-credentials/index.js +0 -376
- package/src/rules/no-hardcoded-session-tokens/index.d.ts +0 -6
- package/src/rules/no-hardcoded-session-tokens/index.js +0 -59
- package/src/rules/no-http-urls/index.d.ts +0 -12
- package/src/rules/no-http-urls/index.js +0 -114
- package/src/rules/no-improper-sanitization/index.d.ts +0 -12
- package/src/rules/no-improper-sanitization/index.js +0 -411
- package/src/rules/no-improper-type-validation/index.d.ts +0 -10
- package/src/rules/no-improper-type-validation/index.js +0 -475
- package/src/rules/no-insecure-comparison/index.d.ts +0 -7
- package/src/rules/no-insecure-comparison/index.js +0 -193
- package/src/rules/no-insecure-cookie-settings/index.d.ts +0 -9
- package/src/rules/no-insecure-cookie-settings/index.js +0 -306
- package/src/rules/no-insecure-jwt/index.d.ts +0 -10
- package/src/rules/no-insecure-jwt/index.js +0 -380
- package/src/rules/no-insecure-redirects/index.d.ts +0 -7
- package/src/rules/no-insecure-redirects/index.js +0 -216
- package/src/rules/no-insecure-websocket/index.d.ts +0 -6
- package/src/rules/no-insecure-websocket/index.js +0 -61
- package/src/rules/no-insufficient-postmessage-validation/index.d.ts +0 -14
- package/src/rules/no-insufficient-postmessage-validation/index.js +0 -392
- package/src/rules/no-insufficient-random/index.d.ts +0 -9
- package/src/rules/no-insufficient-random/index.js +0 -208
- package/src/rules/no-ldap-injection/index.d.ts +0 -10
- package/src/rules/no-ldap-injection/index.js +0 -455
- package/src/rules/no-missing-authentication/index.d.ts +0 -13
- package/src/rules/no-missing-authentication/index.js +0 -333
- package/src/rules/no-missing-cors-check/index.d.ts +0 -9
- package/src/rules/no-missing-cors-check/index.js +0 -399
- package/src/rules/no-missing-csrf-protection/index.d.ts +0 -11
- package/src/rules/no-missing-csrf-protection/index.js +0 -180
- package/src/rules/no-missing-security-headers/index.d.ts +0 -7
- package/src/rules/no-missing-security-headers/index.js +0 -218
- package/src/rules/no-password-in-url/index.d.ts +0 -8
- package/src/rules/no-password-in-url/index.js +0 -54
- package/src/rules/no-permissive-cors/index.d.ts +0 -8
- package/src/rules/no-permissive-cors/index.js +0 -65
- package/src/rules/no-pii-in-logs/index.d.ts +0 -8
- package/src/rules/no-pii-in-logs/index.js +0 -70
- package/src/rules/no-postmessage-origin-wildcard/index.d.ts +0 -8
- package/src/rules/no-postmessage-origin-wildcard/index.js +0 -56
- package/src/rules/no-privilege-escalation/index.d.ts +0 -13
- package/src/rules/no-privilege-escalation/index.js +0 -321
- package/src/rules/no-redos-vulnerable-regex/index.d.ts +0 -7
- package/src/rules/no-redos-vulnerable-regex/index.js +0 -306
- package/src/rules/no-sensitive-data-exposure/index.d.ts +0 -11
- package/src/rules/no-sensitive-data-exposure/index.js +0 -250
- package/src/rules/no-sensitive-data-in-analytics/index.d.ts +0 -8
- package/src/rules/no-sensitive-data-in-analytics/index.js +0 -62
- package/src/rules/no-sensitive-data-in-cache/index.d.ts +0 -8
- package/src/rules/no-sensitive-data-in-cache/index.js +0 -52
- package/src/rules/no-sql-injection/index.d.ts +0 -10
- package/src/rules/no-sql-injection/index.js +0 -335
- package/src/rules/no-timing-attack/index.d.ts +0 -10
- package/src/rules/no-timing-attack/index.js +0 -447
- package/src/rules/no-toctou-vulnerability/index.d.ts +0 -7
- package/src/rules/no-toctou-vulnerability/index.js +0 -208
- package/src/rules/no-tracking-without-consent/index.d.ts +0 -6
- package/src/rules/no-tracking-without-consent/index.js +0 -67
- package/src/rules/no-unchecked-loop-condition/index.d.ts +0 -12
- package/src/rules/no-unchecked-loop-condition/index.js +0 -646
- package/src/rules/no-unencrypted-local-storage/index.d.ts +0 -8
- package/src/rules/no-unencrypted-local-storage/index.js +0 -61
- package/src/rules/no-unencrypted-transmission/index.d.ts +0 -11
- package/src/rules/no-unencrypted-transmission/index.js +0 -236
- package/src/rules/no-unescaped-url-parameter/index.d.ts +0 -9
- package/src/rules/no-unescaped-url-parameter/index.js +0 -355
- package/src/rules/no-unlimited-resource-allocation/index.d.ts +0 -12
- package/src/rules/no-unlimited-resource-allocation/index.js +0 -643
- package/src/rules/no-unsafe-deserialization/index.d.ts +0 -10
- package/src/rules/no-unsafe-deserialization/index.js +0 -491
- package/src/rules/no-unsafe-dynamic-require/index.d.ts +0 -5
- package/src/rules/no-unsafe-dynamic-require/index.js +0 -106
- package/src/rules/no-unsafe-regex-construction/index.d.ts +0 -9
- package/src/rules/no-unsafe-regex-construction/index.js +0 -291
- package/src/rules/no-unsanitized-html/index.d.ts +0 -9
- package/src/rules/no-unsanitized-html/index.js +0 -335
- package/src/rules/no-unvalidated-deeplinks/index.d.ts +0 -6
- package/src/rules/no-unvalidated-deeplinks/index.js +0 -62
- package/src/rules/no-unvalidated-user-input/index.d.ts +0 -9
- package/src/rules/no-unvalidated-user-input/index.js +0 -420
- package/src/rules/no-verbose-error-messages/index.d.ts +0 -8
- package/src/rules/no-verbose-error-messages/index.js +0 -68
- package/src/rules/no-weak-crypto/index.d.ts +0 -11
- package/src/rules/no-weak-crypto/index.js +0 -351
- package/src/rules/no-weak-password-recovery/index.d.ts +0 -12
- package/src/rules/no-weak-password-recovery/index.js +0 -424
- package/src/rules/no-xpath-injection/index.d.ts +0 -10
- package/src/rules/no-xpath-injection/index.js +0 -487
- package/src/rules/no-xxe-injection/index.d.ts +0 -7
- package/src/rules/no-xxe-injection/index.js +0 -266
- package/src/rules/no-zip-slip/index.d.ts +0 -9
- package/src/rules/no-zip-slip/index.js +0 -445
- package/src/rules/require-backend-authorization/index.d.ts +0 -6
- package/src/rules/require-backend-authorization/index.js +0 -60
- package/src/rules/require-code-minification/index.d.ts +0 -8
- package/src/rules/require-code-minification/index.js +0 -47
- package/src/rules/require-csp-headers/index.d.ts +0 -6
- package/src/rules/require-csp-headers/index.js +0 -64
- package/src/rules/require-data-minimization/index.d.ts +0 -8
- package/src/rules/require-data-minimization/index.js +0 -53
- package/src/rules/require-dependency-integrity/index.d.ts +0 -6
- package/src/rules/require-dependency-integrity/index.js +0 -64
- package/src/rules/require-https-only/index.d.ts +0 -8
- package/src/rules/require-https-only/index.js +0 -62
- package/src/rules/require-mime-type-validation/index.d.ts +0 -6
- package/src/rules/require-mime-type-validation/index.js +0 -66
- package/src/rules/require-network-timeout/index.d.ts +0 -8
- package/src/rules/require-network-timeout/index.js +0 -50
- package/src/rules/require-package-lock/index.d.ts +0 -8
- package/src/rules/require-package-lock/index.js +0 -63
- package/src/rules/require-secure-credential-storage/index.d.ts +0 -8
- package/src/rules/require-secure-credential-storage/index.js +0 -50
- package/src/rules/require-secure-defaults/index.d.ts +0 -8
- package/src/rules/require-secure-defaults/index.js +0 -47
- package/src/rules/require-secure-deletion/index.d.ts +0 -8
- package/src/rules/require-secure-deletion/index.js +0 -44
- package/src/rules/require-storage-encryption/index.d.ts +0 -8
- package/src/rules/require-storage-encryption/index.js +0 -50
- package/src/rules/require-url-validation/index.d.ts +0 -6
- package/src/rules/require-url-validation/index.js +0 -72
- package/src/types/index.js +0 -17
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Ensure secure default configurations
|
|
3
|
+
* @see https://owasp.org/www-project-mobile-top-10/
|
|
4
|
+
* @see https://cwe.mitre.org/data/definitions/453.html
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createRule, formatLLMMessage, MessageIcons } from '@interlace/eslint-devkit';
|
|
8
|
+
import type { TSESTree } from '@interlace/eslint-devkit';
|
|
9
|
+
|
|
10
|
+
type MessageIds = 'violationDetected';
|
|
11
|
+
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Rule has no configurable options
|
|
13
|
+
export interface Options {}
|
|
14
|
+
|
|
15
|
+
type RuleOptions = [Options?];
|
|
16
|
+
|
|
17
|
+
export const requireSecureDefaults = createRule<RuleOptions, MessageIds>({
|
|
18
|
+
name: 'require-secure-defaults',
|
|
19
|
+
meta: {
|
|
20
|
+
type: 'problem',
|
|
21
|
+
docs: {
|
|
22
|
+
description: 'Ensure secure default configurations',
|
|
23
|
+
category: 'Security',
|
|
24
|
+
recommended: true,
|
|
25
|
+
owaspMobile: ['M8'],
|
|
26
|
+
cweIds: ["CWE-453"],
|
|
27
|
+
},
|
|
28
|
+
messages: {
|
|
29
|
+
violationDetected: formatLLMMessage({
|
|
30
|
+
icon: MessageIcons.SECURITY,
|
|
31
|
+
issueName: 'violation Detected',
|
|
32
|
+
cwe: 'CWE-1188',
|
|
33
|
+
description: 'Ensure secure default configurations detected - Insecure default values',
|
|
34
|
+
severity: 'MEDIUM',
|
|
35
|
+
fix: 'Review and apply secure practices',
|
|
36
|
+
documentationLink: 'https://cwe.mitre.org/data/definitions/1188.html',
|
|
37
|
+
})
|
|
38
|
+
},
|
|
39
|
+
schema: [],
|
|
40
|
+
},
|
|
41
|
+
defaultOptions: [],
|
|
42
|
+
create(context) {
|
|
43
|
+
return {
|
|
44
|
+
Property(node: TSESTree.Property) {
|
|
45
|
+
if (node.key.type === 'Identifier' &&
|
|
46
|
+
['secure', 'strictSSL', 'verify'].includes(node.key.name) &&
|
|
47
|
+
node.value.type === 'Literal' &&
|
|
48
|
+
node.value.value === false) {
|
|
49
|
+
context.report({ node, messageId: 'violationDetected' });
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for require-secure-defaults
|
|
3
|
+
*
|
|
4
|
+
* Coverage: Comprehensive test suite with valid and invalid cases
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { RuleTester } from '@typescript-eslint/rule-tester';
|
|
8
|
+
import { requireSecureDefaults } from './index';
|
|
9
|
+
|
|
10
|
+
const ruleTester = new RuleTester({
|
|
11
|
+
languageOptions: {
|
|
12
|
+
ecmaVersion: 2022,
|
|
13
|
+
sourceType: 'module',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
ruleTester.run('require-secure-defaults', requireSecureDefaults, {
|
|
18
|
+
valid: [
|
|
19
|
+
{ code: "const config = { secure: true, httpOnly: true }" },
|
|
20
|
+
{ code: "cookie({ secure: true })" }
|
|
21
|
+
],
|
|
22
|
+
|
|
23
|
+
invalid: [
|
|
24
|
+
{ code: "cookie({ secure: false })", errors: [{ messageId: 'violationDetected' }] }
|
|
25
|
+
],
|
|
26
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Require secure data deletion patterns
|
|
3
|
+
* @see https://owasp.org/www-project-mobile-top-10/
|
|
4
|
+
* @see https://cwe.mitre.org/data/definitions/459.html
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createRule, formatLLMMessage, MessageIcons } from '@interlace/eslint-devkit';
|
|
8
|
+
import type { TSESTree } from '@interlace/eslint-devkit';
|
|
9
|
+
|
|
10
|
+
type MessageIds = 'violationDetected';
|
|
11
|
+
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Rule has no configurable options
|
|
13
|
+
export interface Options {}
|
|
14
|
+
|
|
15
|
+
type RuleOptions = [Options?];
|
|
16
|
+
|
|
17
|
+
export const requireSecureDeletion = createRule<RuleOptions, MessageIds>({
|
|
18
|
+
name: 'require-secure-deletion',
|
|
19
|
+
meta: {
|
|
20
|
+
type: 'problem',
|
|
21
|
+
docs: {
|
|
22
|
+
description: 'Require secure data deletion patterns',
|
|
23
|
+
category: 'Security',
|
|
24
|
+
recommended: true,
|
|
25
|
+
owaspMobile: ['M9'],
|
|
26
|
+
cweIds: ["CWE-459"],
|
|
27
|
+
},
|
|
28
|
+
messages: {
|
|
29
|
+
violationDetected: formatLLMMessage({
|
|
30
|
+
icon: MessageIcons.SECURITY,
|
|
31
|
+
issueName: 'violation Detected',
|
|
32
|
+
cwe: 'CWE-459',
|
|
33
|
+
description: 'Require secure data deletion patterns detected - delete without secure wipe',
|
|
34
|
+
severity: 'MEDIUM',
|
|
35
|
+
fix: 'Review and apply secure practices',
|
|
36
|
+
documentationLink: 'https://cwe.mitre.org/data/definitions/459.html',
|
|
37
|
+
})
|
|
38
|
+
},
|
|
39
|
+
schema: [],
|
|
40
|
+
},
|
|
41
|
+
defaultOptions: [],
|
|
42
|
+
create(context) {
|
|
43
|
+
return {
|
|
44
|
+
|
|
45
|
+
UnaryExpression(node: TSESTree.UnaryExpression) {
|
|
46
|
+
if (node.operator === 'delete') {
|
|
47
|
+
context.report({ node, messageId: 'violationDetected' });
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for require-secure-deletion
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { RuleTester } from '@typescript-eslint/rule-tester';
|
|
6
|
+
import { requireSecureDeletion } from './index';
|
|
7
|
+
|
|
8
|
+
const ruleTester = new RuleTester({
|
|
9
|
+
languageOptions: {
|
|
10
|
+
ecmaVersion: 2022,
|
|
11
|
+
sourceType: 'module',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
ruleTester.run('require-secure-deletion', requireSecureDeletion, {
|
|
16
|
+
valid: [
|
|
17
|
+
// Secure deletion patterns
|
|
18
|
+
{ code: "secureDelete(file)" },
|
|
19
|
+
{ code: "data = null; gc()" },
|
|
20
|
+
{ code: "const x = 1" },
|
|
21
|
+
],
|
|
22
|
+
|
|
23
|
+
invalid: [
|
|
24
|
+
// Using delete operator (doesn't securely wipe)
|
|
25
|
+
{ code: "delete user.password", errors: [{ messageId: 'violationDetected' }] },
|
|
26
|
+
{ code: "delete sensitiveData.token", errors: [{ messageId: 'violationDetected' }] },
|
|
27
|
+
{ code: "delete obj.secret", errors: [{ messageId: 'violationDetected' }] },
|
|
28
|
+
],
|
|
29
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Require encryption for persistent storage
|
|
3
|
+
* @see https://owasp.org/www-project-mobile-top-10/
|
|
4
|
+
* @see https://cwe.mitre.org/data/definitions/311.html
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createRule, formatLLMMessage, MessageIcons } from '@interlace/eslint-devkit';
|
|
8
|
+
import type { TSESTree } from '@interlace/eslint-devkit';
|
|
9
|
+
|
|
10
|
+
type MessageIds = 'violationDetected';
|
|
11
|
+
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Rule has no configurable options
|
|
13
|
+
export interface Options {}
|
|
14
|
+
|
|
15
|
+
type RuleOptions = [Options?];
|
|
16
|
+
|
|
17
|
+
export const requireStorageEncryption = createRule<RuleOptions, MessageIds>({
|
|
18
|
+
name: 'require-storage-encryption',
|
|
19
|
+
meta: {
|
|
20
|
+
type: 'problem',
|
|
21
|
+
docs: {
|
|
22
|
+
description: 'Require encryption for persistent storage',
|
|
23
|
+
category: 'Security',
|
|
24
|
+
recommended: true,
|
|
25
|
+
owaspMobile: ['M9'],
|
|
26
|
+
cweIds: ["CWE-311"],
|
|
27
|
+
},
|
|
28
|
+
messages: {
|
|
29
|
+
violationDetected: formatLLMMessage({
|
|
30
|
+
icon: MessageIcons.SECURITY,
|
|
31
|
+
issueName: 'violation Detected',
|
|
32
|
+
cwe: 'CWE-312',
|
|
33
|
+
description: 'Require encryption for persistent storage detected - Storage without encryption',
|
|
34
|
+
severity: 'HIGH',
|
|
35
|
+
fix: 'Review and apply secure practices',
|
|
36
|
+
documentationLink: 'https://cwe.mitre.org/data/definitions/312.html',
|
|
37
|
+
})
|
|
38
|
+
},
|
|
39
|
+
schema: [],
|
|
40
|
+
},
|
|
41
|
+
defaultOptions: [],
|
|
42
|
+
create(context) {
|
|
43
|
+
return {
|
|
44
|
+
|
|
45
|
+
CallExpression(node: TSESTree.CallExpression) {
|
|
46
|
+
if (node.callee.type === 'MemberExpression' &&
|
|
47
|
+
['setItem', 'writeFile'].includes(node.callee.property.name)) {
|
|
48
|
+
// Check for encryption wrapper
|
|
49
|
+
const hasEncryption = node.arguments.some(arg =>
|
|
50
|
+
arg.type === 'CallExpression' &&
|
|
51
|
+
arg.callee.name?.includes('encrypt')
|
|
52
|
+
);
|
|
53
|
+
if (!hasEncryption) {
|
|
54
|
+
context.report({ node, messageId: 'violationDetected' });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for require-storage-encryption
|
|
3
|
+
*
|
|
4
|
+
* Coverage: Comprehensive test suite with valid and invalid cases
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { RuleTester } from '@typescript-eslint/rule-tester';
|
|
8
|
+
import { requireStorageEncryption } from './index';
|
|
9
|
+
|
|
10
|
+
const ruleTester = new RuleTester({
|
|
11
|
+
languageOptions: {
|
|
12
|
+
ecmaVersion: 2022,
|
|
13
|
+
sourceType: 'module',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
ruleTester.run('require-storage-encryption', requireStorageEncryption, {
|
|
18
|
+
valid: [
|
|
19
|
+
{ code: "await SecureStore.setItemAsync('token', token)" },
|
|
20
|
+
{ code: "const encrypted = encrypt(data)" }
|
|
21
|
+
],
|
|
22
|
+
|
|
23
|
+
invalid: [
|
|
24
|
+
{ code: "AsyncStorage.setItem('password', pwd)", errors: [{ messageId: 'violationDetected' }] }
|
|
25
|
+
],
|
|
26
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enforce URL validation before navigation
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { createRule, formatLLMMessage, MessageIcons } from '@interlace/eslint-devkit';
|
|
6
|
+
import type { TSESTree } from '@interlace/eslint-devkit';
|
|
7
|
+
|
|
8
|
+
type MessageIds = 'violationDetected';
|
|
9
|
+
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Rule has no configurable options
|
|
11
|
+
export interface Options {}
|
|
12
|
+
|
|
13
|
+
type RuleOptions = [Options?];
|
|
14
|
+
|
|
15
|
+
export const requireUrlValidation = createRule<RuleOptions, MessageIds>({
|
|
16
|
+
name: 'require-url-validation',
|
|
17
|
+
meta: {
|
|
18
|
+
type: 'problem',
|
|
19
|
+
docs: {
|
|
20
|
+
description: 'Enforce URL validation before navigation',
|
|
21
|
+
},
|
|
22
|
+
messages: {
|
|
23
|
+
violationDetected: formatLLMMessage({
|
|
24
|
+
icon: MessageIcons.SECURITY,
|
|
25
|
+
issueName: 'URL Validation Required',
|
|
26
|
+
cwe: 'CWE-601',
|
|
27
|
+
description: 'Unvalidated URL used for navigation - this is a security risk',
|
|
28
|
+
severity: 'HIGH',
|
|
29
|
+
fix: 'Validate URLs before using them for navigation',
|
|
30
|
+
documentationLink: 'https://cwe.mitre.org/data/definitions/601.html',
|
|
31
|
+
})
|
|
32
|
+
},
|
|
33
|
+
schema: [],
|
|
34
|
+
},
|
|
35
|
+
defaultOptions: [],
|
|
36
|
+
create(context) {
|
|
37
|
+
function report(node: TSESTree.Node) {
|
|
38
|
+
context.report({ node, messageId: 'violationDetected' });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
AssignmentExpression(node: TSESTree.AssignmentExpression) {
|
|
43
|
+
// Detect window.location assignment from user input
|
|
44
|
+
if (node.left.type === 'MemberExpression' &&
|
|
45
|
+
node.left.object.type === 'Identifier' &&
|
|
46
|
+
node.left.object.name === 'window' &&
|
|
47
|
+
node.left.property.type === 'Identifier' &&
|
|
48
|
+
node.left.property.name === 'location') {
|
|
49
|
+
|
|
50
|
+
// Flag if right side is a variable (not a literal URL)
|
|
51
|
+
if (node.right.type === 'Identifier') {
|
|
52
|
+
report(node);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Detect location.href assignment
|
|
57
|
+
if (node.left.type === 'MemberExpression' &&
|
|
58
|
+
node.left.object.type === 'Identifier' &&
|
|
59
|
+
node.left.object.name === 'location' &&
|
|
60
|
+
node.left.property.type === 'Identifier' &&
|
|
61
|
+
node.left.property.name === 'href') {
|
|
62
|
+
|
|
63
|
+
if (node.right.type === 'Identifier') {
|
|
64
|
+
report(node);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
CallExpression(node: TSESTree.CallExpression) {
|
|
70
|
+
// Detect window.open with variable URL
|
|
71
|
+
if (node.callee.type === 'MemberExpression' &&
|
|
72
|
+
node.callee.object.type === 'Identifier' &&
|
|
73
|
+
node.callee.object.name === 'window' &&
|
|
74
|
+
node.callee.property.type === 'Identifier' &&
|
|
75
|
+
node.callee.property.name === 'open') {
|
|
76
|
+
|
|
77
|
+
const urlArg = node.arguments[0];
|
|
78
|
+
if (urlArg && urlArg.type === 'Identifier') {
|
|
79
|
+
report(node);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for require-url-validation
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { RuleTester } from '@typescript-eslint/rule-tester';
|
|
6
|
+
import { requireUrlValidation } from './index';
|
|
7
|
+
|
|
8
|
+
const ruleTester = new RuleTester({
|
|
9
|
+
languageOptions: {
|
|
10
|
+
ecmaVersion: 2022,
|
|
11
|
+
sourceType: 'module',
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
ruleTester.run('require-url-validation', requireUrlValidation, {
|
|
16
|
+
valid: [
|
|
17
|
+
// Safe static URLs
|
|
18
|
+
{ code: "window.location = 'https://example.com'" },
|
|
19
|
+
{ code: "location.href = 'https://safe.com'" },
|
|
20
|
+
{ code: "window.open('https://example.com')" },
|
|
21
|
+
// Non-navigation code
|
|
22
|
+
{ code: "const url = 'https://example.com'" },
|
|
23
|
+
{ code: "const x = 1" },
|
|
24
|
+
],
|
|
25
|
+
|
|
26
|
+
invalid: [
|
|
27
|
+
// Variable URLs without validation
|
|
28
|
+
{ code: "window.location = userUrl", errors: [{ messageId: 'violationDetected' }] },
|
|
29
|
+
{ code: "location.href = redirectUrl", errors: [{ messageId: 'violationDetected' }] },
|
|
30
|
+
{ code: "window.open(targetUrl)", errors: [{ messageId: 'violationDetected' }] },
|
|
31
|
+
],
|
|
32
|
+
});
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* eslint-plugin-secure-coding Type Exports
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Barrel file that exports all security rule Options types with consistent naming.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
6
|
* Usage:
|
|
7
7
|
* ```typescript
|
|
8
8
|
* import type { NoSqlInjectionOptions } from 'eslint-plugin-secure-coding/types';
|
|
9
|
-
*
|
|
9
|
+
*
|
|
10
10
|
* const config: NoSqlInjectionOptions = {
|
|
11
11
|
* allowDynamicTableNames: false,
|
|
12
12
|
* strategy: 'parameterize',
|
|
13
13
|
* };
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
+
|
|
17
|
+
// Injection Rules
|
|
16
18
|
import type { Options as NoSqlInjectionOptions } from '../rules/no-sql-injection';
|
|
17
19
|
import type { Options as DatabaseInjectionOptions } from '../rules/database-injection';
|
|
18
20
|
import type { Options as DetectEvalWithExpressionOptions } from '../rules/detect-eval-with-expression';
|
|
@@ -24,48 +26,137 @@ import type { Options as NoXpathInjectionOptions } from '../rules/no-xpath-injec
|
|
|
24
26
|
import type { Options as NoLdapInjectionOptions } from '../rules/no-ldap-injection';
|
|
25
27
|
import type { Options as NoDirectiveInjectionOptions } from '../rules/no-directive-injection';
|
|
26
28
|
import type { Options as NoFormatStringInjectionOptions } from '../rules/no-format-string-injection';
|
|
29
|
+
|
|
30
|
+
// Path & File Rules
|
|
27
31
|
import type { Options as DetectNonLiteralFsFilenameOptions } from '../rules/detect-non-literal-fs-filename';
|
|
28
32
|
import type { Options as NoZipSlipOptions } from '../rules/no-zip-slip';
|
|
29
33
|
import type { Options as NoToctouVulnerabilityOptions } from '../rules/no-toctou-vulnerability';
|
|
34
|
+
|
|
35
|
+
// Regex Rules
|
|
30
36
|
import type { Options as DetectNonLiteralRegexpOptions } from '../rules/detect-non-literal-regexp';
|
|
31
37
|
import type { Options as NoRedosVulnerableRegexOptions } from '../rules/no-redos-vulnerable-regex';
|
|
32
38
|
import type { Options as NoUnsafeRegexConstructionOptions } from '../rules/no-unsafe-regex-construction';
|
|
39
|
+
|
|
40
|
+
// Object & Prototype Rules
|
|
33
41
|
import type { Options as DetectObjectInjectionOptions } from '../rules/detect-object-injection';
|
|
34
42
|
import type { Options as NoUnsafeDeserializationOptions } from '../rules/no-unsafe-deserialization';
|
|
43
|
+
|
|
44
|
+
// Credentials & Crypto Rules
|
|
35
45
|
import type { Options as NoHardcodedCredentialsOptions } from '../rules/no-hardcoded-credentials';
|
|
36
46
|
import type { Options as NoWeakCryptoOptions } from '../rules/no-weak-crypto';
|
|
37
47
|
import type { Options as NoInsufficientRandomOptions } from '../rules/no-insufficient-random';
|
|
38
48
|
import type { Options as NoTimingAttackOptions } from '../rules/no-timing-attack';
|
|
39
49
|
import type { Options as NoInsecureComparisonOptions } from '../rules/no-insecure-comparison';
|
|
40
50
|
import type { Options as NoInsecureJwtOptions } from '../rules/no-insecure-jwt';
|
|
51
|
+
|
|
52
|
+
// Input Validation & XSS Rules
|
|
41
53
|
import type { Options as NoUnvalidatedUserInputOptions } from '../rules/no-unvalidated-user-input';
|
|
42
54
|
import type { Options as NoUnsanitizedHtmlOptions } from '../rules/no-unsanitized-html';
|
|
43
55
|
import type { Options as NoUnescapedUrlParameterOptions } from '../rules/no-unescaped-url-parameter';
|
|
44
56
|
import type { Options as NoImproperSanitizationOptions } from '../rules/no-improper-sanitization';
|
|
45
57
|
import type { Options as NoImproperTypeValidationOptions } from '../rules/no-improper-type-validation';
|
|
58
|
+
|
|
59
|
+
// Authentication & Authorization Rules
|
|
46
60
|
import type { Options as NoMissingAuthenticationOptions } from '../rules/no-missing-authentication';
|
|
47
61
|
import type { Options as NoPrivilegeEscalationOptions } from '../rules/no-privilege-escalation';
|
|
48
62
|
import type { Options as NoWeakPasswordRecoveryOptions } from '../rules/no-weak-password-recovery';
|
|
63
|
+
|
|
64
|
+
// Session & Cookies Rules
|
|
49
65
|
import type { Options as NoInsecureCookieSettingsOptions } from '../rules/no-insecure-cookie-settings';
|
|
50
66
|
import type { Options as NoMissingCsrfProtectionOptions } from '../rules/no-missing-csrf-protection';
|
|
51
67
|
import type { Options as NoDocumentCookieOptions } from '../rules/no-document-cookie';
|
|
68
|
+
|
|
69
|
+
// Network & Headers Rules
|
|
52
70
|
import type { Options as NoMissingCorsCheckOptions } from '../rules/no-missing-cors-check';
|
|
53
71
|
import type { Options as NoMissingSecurityHeadersOptions } from '../rules/no-missing-security-headers';
|
|
54
72
|
import type { Options as NoInsecureRedirectsOptions } from '../rules/no-insecure-redirects';
|
|
55
73
|
import type { Options as NoUnencryptedTransmissionOptions } from '../rules/no-unencrypted-transmission';
|
|
56
74
|
import type { Options as NoClickjackingOptions } from '../rules/no-clickjacking';
|
|
75
|
+
|
|
76
|
+
// Data Exposure Rules
|
|
57
77
|
import type { Options as NoExposedSensitiveDataOptions } from '../rules/no-exposed-sensitive-data';
|
|
58
78
|
import type { Options as NoSensitiveDataExposureOptions } from '../rules/no-sensitive-data-exposure';
|
|
79
|
+
|
|
80
|
+
// Buffer & Memory Rules
|
|
59
81
|
import type { Options as NoBufferOverreadOptions } from '../rules/no-buffer-overread';
|
|
82
|
+
|
|
83
|
+
// Resource & DoS Rules
|
|
60
84
|
import type { Options as NoUnlimitedResourceAllocationOptions } from '../rules/no-unlimited-resource-allocation';
|
|
61
85
|
import type { Options as NoUncheckedLoopConditionOptions } from '../rules/no-unchecked-loop-condition';
|
|
86
|
+
|
|
87
|
+
// Platform Specific Rules
|
|
62
88
|
import type { Options as NoElectronSecurityIssuesOptions } from '../rules/no-electron-security-issues';
|
|
63
89
|
import type { Options as NoInsufficientPostmessageValidationOptions } from '../rules/no-insufficient-postmessage-validation';
|
|
64
|
-
|
|
90
|
+
|
|
91
|
+
// Export all types with consistent naming
|
|
92
|
+
export type {
|
|
93
|
+
// Injection
|
|
94
|
+
NoSqlInjectionOptions,
|
|
95
|
+
DatabaseInjectionOptions,
|
|
96
|
+
DetectEvalWithExpressionOptions,
|
|
97
|
+
DetectChildProcessOptions,
|
|
98
|
+
NoUnsafeDynamicRequireOptions,
|
|
99
|
+
NoGraphqlInjectionOptions,
|
|
100
|
+
NoXxeInjectionOptions,
|
|
101
|
+
NoXpathInjectionOptions,
|
|
102
|
+
NoLdapInjectionOptions,
|
|
103
|
+
NoDirectiveInjectionOptions,
|
|
104
|
+
NoFormatStringInjectionOptions,
|
|
105
|
+
// Path & File
|
|
106
|
+
DetectNonLiteralFsFilenameOptions,
|
|
107
|
+
NoZipSlipOptions,
|
|
108
|
+
NoToctouVulnerabilityOptions,
|
|
109
|
+
// Regex
|
|
110
|
+
DetectNonLiteralRegexpOptions,
|
|
111
|
+
NoRedosVulnerableRegexOptions,
|
|
112
|
+
NoUnsafeRegexConstructionOptions,
|
|
113
|
+
// Object & Prototype
|
|
114
|
+
DetectObjectInjectionOptions,
|
|
115
|
+
NoUnsafeDeserializationOptions,
|
|
116
|
+
// Credentials & Crypto
|
|
117
|
+
NoHardcodedCredentialsOptions,
|
|
118
|
+
NoWeakCryptoOptions,
|
|
119
|
+
NoInsufficientRandomOptions,
|
|
120
|
+
NoTimingAttackOptions,
|
|
121
|
+
NoInsecureComparisonOptions,
|
|
122
|
+
NoInsecureJwtOptions,
|
|
123
|
+
// Input Validation & XSS
|
|
124
|
+
NoUnvalidatedUserInputOptions,
|
|
125
|
+
NoUnsanitizedHtmlOptions,
|
|
126
|
+
NoUnescapedUrlParameterOptions,
|
|
127
|
+
NoImproperSanitizationOptions,
|
|
128
|
+
NoImproperTypeValidationOptions,
|
|
129
|
+
// Authentication & Authorization
|
|
130
|
+
NoMissingAuthenticationOptions,
|
|
131
|
+
NoPrivilegeEscalationOptions,
|
|
132
|
+
NoWeakPasswordRecoveryOptions,
|
|
133
|
+
// Session & Cookies
|
|
134
|
+
NoInsecureCookieSettingsOptions,
|
|
135
|
+
NoMissingCsrfProtectionOptions,
|
|
136
|
+
NoDocumentCookieOptions,
|
|
137
|
+
// Network & Headers
|
|
138
|
+
NoMissingCorsCheckOptions,
|
|
139
|
+
NoMissingSecurityHeadersOptions,
|
|
140
|
+
NoInsecureRedirectsOptions,
|
|
141
|
+
NoUnencryptedTransmissionOptions,
|
|
142
|
+
NoClickjackingOptions,
|
|
143
|
+
// Data Exposure
|
|
144
|
+
NoExposedSensitiveDataOptions,
|
|
145
|
+
NoSensitiveDataExposureOptions,
|
|
146
|
+
// Buffer & Memory
|
|
147
|
+
NoBufferOverreadOptions,
|
|
148
|
+
// Resource & DoS
|
|
149
|
+
NoUnlimitedResourceAllocationOptions,
|
|
150
|
+
NoUncheckedLoopConditionOptions,
|
|
151
|
+
// Platform Specific
|
|
152
|
+
NoElectronSecurityIssuesOptions,
|
|
153
|
+
NoInsufficientPostmessageValidationOptions,
|
|
154
|
+
};
|
|
155
|
+
|
|
65
156
|
/**
|
|
66
157
|
* Combined type for all security rule options
|
|
67
158
|
* Useful for creating unified configuration objects
|
|
68
|
-
*
|
|
159
|
+
*
|
|
69
160
|
* @example
|
|
70
161
|
* ```typescript
|
|
71
162
|
* const config: AllSecurityRulesOptions = {
|
|
@@ -80,52 +171,65 @@ export type { NoSqlInjectionOptions, DatabaseInjectionOptions, DetectEvalWithExp
|
|
|
80
171
|
* ```
|
|
81
172
|
*/
|
|
82
173
|
export type AllSecurityRulesOptions = {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
174
|
+
// Injection
|
|
175
|
+
'no-sql-injection'?: NoSqlInjectionOptions;
|
|
176
|
+
'database-injection'?: DatabaseInjectionOptions;
|
|
177
|
+
'detect-eval-with-expression'?: DetectEvalWithExpressionOptions;
|
|
178
|
+
'detect-child-process'?: DetectChildProcessOptions;
|
|
179
|
+
'no-unsafe-dynamic-require'?: NoUnsafeDynamicRequireOptions;
|
|
180
|
+
'no-graphql-injection'?: NoGraphqlInjectionOptions;
|
|
181
|
+
'no-xxe-injection'?: NoXxeInjectionOptions;
|
|
182
|
+
'no-xpath-injection'?: NoXpathInjectionOptions;
|
|
183
|
+
'no-ldap-injection'?: NoLdapInjectionOptions;
|
|
184
|
+
'no-directive-injection'?: NoDirectiveInjectionOptions;
|
|
185
|
+
'no-format-string-injection'?: NoFormatStringInjectionOptions;
|
|
186
|
+
// Path & File
|
|
187
|
+
'detect-non-literal-fs-filename'?: DetectNonLiteralFsFilenameOptions;
|
|
188
|
+
'no-zip-slip'?: NoZipSlipOptions;
|
|
189
|
+
'no-toctou-vulnerability'?: NoToctouVulnerabilityOptions;
|
|
190
|
+
// Regex
|
|
191
|
+
'detect-non-literal-regexp'?: DetectNonLiteralRegexpOptions;
|
|
192
|
+
'no-redos-vulnerable-regex'?: NoRedosVulnerableRegexOptions;
|
|
193
|
+
'no-unsafe-regex-construction'?: NoUnsafeRegexConstructionOptions;
|
|
194
|
+
// Object & Prototype
|
|
195
|
+
'detect-object-injection'?: DetectObjectInjectionOptions;
|
|
196
|
+
'no-unsafe-deserialization'?: NoUnsafeDeserializationOptions;
|
|
197
|
+
// Credentials & Crypto
|
|
198
|
+
'no-hardcoded-credentials'?: NoHardcodedCredentialsOptions;
|
|
199
|
+
'no-weak-crypto'?: NoWeakCryptoOptions;
|
|
200
|
+
'no-insufficient-random'?: NoInsufficientRandomOptions;
|
|
201
|
+
'no-timing-attack'?: NoTimingAttackOptions;
|
|
202
|
+
'no-insecure-comparison'?: NoInsecureComparisonOptions;
|
|
203
|
+
'no-insecure-jwt'?: NoInsecureJwtOptions;
|
|
204
|
+
// Input Validation & XSS
|
|
205
|
+
'no-unvalidated-user-input'?: NoUnvalidatedUserInputOptions;
|
|
206
|
+
'no-unsanitized-html'?: NoUnsanitizedHtmlOptions;
|
|
207
|
+
'no-unescaped-url-parameter'?: NoUnescapedUrlParameterOptions;
|
|
208
|
+
'no-improper-sanitization'?: NoImproperSanitizationOptions;
|
|
209
|
+
'no-improper-type-validation'?: NoImproperTypeValidationOptions;
|
|
210
|
+
// Authentication & Authorization
|
|
211
|
+
'no-missing-authentication'?: NoMissingAuthenticationOptions;
|
|
212
|
+
'no-privilege-escalation'?: NoPrivilegeEscalationOptions;
|
|
213
|
+
'no-weak-password-recovery'?: NoWeakPasswordRecoveryOptions;
|
|
214
|
+
// Session & Cookies
|
|
215
|
+
'no-insecure-cookie-settings'?: NoInsecureCookieSettingsOptions;
|
|
216
|
+
'no-missing-csrf-protection'?: NoMissingCsrfProtectionOptions;
|
|
217
|
+
'no-document-cookie'?: NoDocumentCookieOptions;
|
|
218
|
+
// Network & Headers
|
|
219
|
+
'no-missing-cors-check'?: NoMissingCorsCheckOptions;
|
|
220
|
+
'no-missing-security-headers'?: NoMissingSecurityHeadersOptions;
|
|
221
|
+
'no-insecure-redirects'?: NoInsecureRedirectsOptions;
|
|
222
|
+
'no-unencrypted-transmission'?: NoUnencryptedTransmissionOptions;
|
|
223
|
+
'no-clickjacking'?: NoClickjackingOptions;
|
|
224
|
+
// Data Exposure
|
|
225
|
+
'no-exposed-sensitive-data'?: NoExposedSensitiveDataOptions;
|
|
226
|
+
'no-sensitive-data-exposure'?: NoSensitiveDataExposureOptions;
|
|
227
|
+
// Buffer & Memory
|
|
228
|
+
'no-buffer-overread'?: NoBufferOverreadOptions;
|
|
229
|
+
// Resource & DoS
|
|
230
|
+
'no-unlimited-resource-allocation'?: NoUnlimitedResourceAllocationOptions;
|
|
231
|
+
'no-unchecked-loop-condition'?: NoUncheckedLoopConditionOptions;
|
|
232
|
+
// Platform Specific
|
|
233
|
+
'no-electron-security-issues'?: NoElectronSecurityIssuesOptions;
|
|
234
|
+
'no-insufficient-postmessage-validation'?: NoInsufficientPostmessageValidationOptions;
|
|
131
235
|
};
|