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.
Files changed (361) hide show
  1. package/README.md +1 -0
  2. package/package.json +3 -10
  3. package/src/index.ts +605 -0
  4. package/src/rules/__tests__/integration-demo.test.ts +290 -0
  5. package/src/rules/__tests__/integration-llm.test.ts +89 -0
  6. package/src/rules/database-injection/database-injection.test.ts +456 -0
  7. package/src/rules/database-injection/index.ts +488 -0
  8. package/src/rules/detect-child-process/detect-child-process.test.ts +207 -0
  9. package/src/rules/detect-child-process/index.ts +634 -0
  10. package/src/rules/detect-eval-with-expression/detect-eval-with-expression.test.ts +416 -0
  11. package/src/rules/detect-eval-with-expression/index.ts +463 -0
  12. package/src/rules/detect-mixed-content/detect-mixed-content.test.ts +28 -0
  13. package/src/rules/detect-mixed-content/index.ts +52 -0
  14. package/src/rules/detect-non-literal-fs-filename/detect-non-literal-fs-filename.test.ts +269 -0
  15. package/src/rules/detect-non-literal-fs-filename/index.ts +551 -0
  16. package/src/rules/detect-non-literal-regexp/detect-non-literal-regexp.test.ts +189 -0
  17. package/src/rules/detect-non-literal-regexp/index.ts +490 -0
  18. package/src/rules/detect-object-injection/detect-object-injection.test.ts +440 -0
  19. package/src/rules/detect-object-injection/index.ts +674 -0
  20. package/src/rules/detect-suspicious-dependencies/detect-suspicious-dependencies.test.ts +32 -0
  21. package/src/rules/detect-suspicious-dependencies/index.ts +84 -0
  22. package/src/rules/detect-weak-password-validation/detect-weak-password-validation.test.ts +31 -0
  23. package/src/rules/detect-weak-password-validation/index.ts +68 -0
  24. package/src/rules/no-allow-arbitrary-loads/index.ts +54 -0
  25. package/src/rules/no-allow-arbitrary-loads/no-allow-arbitrary-loads.test.ts +28 -0
  26. package/src/rules/no-arbitrary-file-access/index.ts +238 -0
  27. package/src/rules/no-arbitrary-file-access/no-arbitrary-file-access.test.ts +119 -0
  28. package/src/rules/no-buffer-overread/index.ts +724 -0
  29. package/src/rules/no-buffer-overread/no-buffer-overread.test.ts +313 -0
  30. package/src/rules/no-clickjacking/index.ts +481 -0
  31. package/src/rules/no-clickjacking/no-clickjacking.test.ts +253 -0
  32. package/src/rules/no-client-side-auth-logic/index.ts +81 -0
  33. package/src/rules/no-client-side-auth-logic/no-client-side-auth-logic.test.ts +33 -0
  34. package/src/rules/no-credentials-in-query-params/index.ts +69 -0
  35. package/src/rules/no-credentials-in-query-params/no-credentials-in-query-params.test.ts +33 -0
  36. package/src/rules/no-credentials-in-storage-api/index.ts +64 -0
  37. package/src/rules/no-credentials-in-storage-api/no-credentials-in-storage-api.test.ts +31 -0
  38. package/src/rules/no-data-in-temp-storage/index.ts +75 -0
  39. package/src/rules/no-data-in-temp-storage/no-data-in-temp-storage.test.ts +33 -0
  40. package/src/rules/no-debug-code-in-production/index.ts +59 -0
  41. package/src/rules/no-debug-code-in-production/no-debug-code-in-production.test.ts +26 -0
  42. package/src/rules/no-directive-injection/index.ts +551 -0
  43. package/src/rules/no-directive-injection/no-directive-injection.test.ts +305 -0
  44. package/src/rules/no-disabled-certificate-validation/index.ts +72 -0
  45. package/src/rules/no-disabled-certificate-validation/no-disabled-certificate-validation.test.ts +33 -0
  46. package/src/rules/no-document-cookie/index.ts +113 -0
  47. package/src/rules/no-document-cookie/no-document-cookie.test.ts +382 -0
  48. package/src/rules/no-dynamic-dependency-loading/index.ts +60 -0
  49. package/src/rules/no-dynamic-dependency-loading/no-dynamic-dependency-loading.test.ts +27 -0
  50. package/src/rules/no-electron-security-issues/index.ts +504 -0
  51. package/src/rules/no-electron-security-issues/no-electron-security-issues.test.ts +324 -0
  52. package/src/rules/no-exposed-debug-endpoints/index.ts +73 -0
  53. package/src/rules/no-exposed-debug-endpoints/no-exposed-debug-endpoints.test.ts +40 -0
  54. package/src/rules/no-exposed-sensitive-data/index.ts +428 -0
  55. package/src/rules/no-exposed-sensitive-data/no-exposed-sensitive-data.test.ts +75 -0
  56. package/src/rules/no-format-string-injection/index.ts +801 -0
  57. package/src/rules/no-format-string-injection/no-format-string-injection.test.ts +437 -0
  58. package/src/rules/no-graphql-injection/index.ts +508 -0
  59. package/src/rules/no-graphql-injection/no-graphql-injection.test.ts +371 -0
  60. package/src/rules/no-hardcoded-credentials/index.ts +478 -0
  61. package/src/rules/no-hardcoded-credentials/no-hardcoded-credentials.test.ts +639 -0
  62. package/src/rules/no-hardcoded-session-tokens/index.ts +69 -0
  63. package/src/rules/no-hardcoded-session-tokens/no-hardcoded-session-tokens.test.ts +42 -0
  64. package/src/rules/no-http-urls/index.ts +131 -0
  65. package/src/rules/no-http-urls/no-http-urls.test.ts +60 -0
  66. package/src/rules/no-improper-sanitization/index.ts +502 -0
  67. package/src/rules/no-improper-sanitization/no-improper-sanitization.test.ts +156 -0
  68. package/src/rules/no-improper-type-validation/index.ts +572 -0
  69. package/src/rules/no-improper-type-validation/no-improper-type-validation.test.ts +372 -0
  70. package/src/rules/no-insecure-comparison/index.ts +232 -0
  71. package/src/rules/no-insecure-comparison/no-insecure-comparison.test.ts +218 -0
  72. package/src/rules/no-insecure-cookie-settings/index.ts +391 -0
  73. package/src/rules/no-insecure-cookie-settings/no-insecure-cookie-settings.test.ts +409 -0
  74. package/src/rules/no-insecure-jwt/index.ts +467 -0
  75. package/src/rules/no-insecure-jwt/no-insecure-jwt.test.ts +259 -0
  76. package/src/rules/no-insecure-redirects/index.ts +267 -0
  77. package/src/rules/no-insecure-redirects/no-insecure-redirects.test.ts +108 -0
  78. package/src/rules/no-insecure-websocket/index.ts +72 -0
  79. package/src/rules/no-insecure-websocket/no-insecure-websocket.test.ts +42 -0
  80. package/src/rules/no-insufficient-postmessage-validation/index.ts +497 -0
  81. package/src/rules/no-insufficient-postmessage-validation/no-insufficient-postmessage-validation.test.ts +360 -0
  82. package/src/rules/no-insufficient-random/index.ts +288 -0
  83. package/src/rules/no-insufficient-random/no-insufficient-random.test.ts +246 -0
  84. package/src/rules/no-ldap-injection/index.ts +547 -0
  85. package/src/rules/no-ldap-injection/no-ldap-injection.test.ts +317 -0
  86. package/src/rules/no-missing-authentication/index.ts +408 -0
  87. package/src/rules/no-missing-authentication/no-missing-authentication.test.ts +350 -0
  88. package/src/rules/no-missing-cors-check/index.ts +453 -0
  89. package/src/rules/no-missing-cors-check/no-missing-cors-check.test.ts +392 -0
  90. package/src/rules/no-missing-csrf-protection/index.ts +229 -0
  91. package/src/rules/no-missing-csrf-protection/no-missing-csrf-protection.test.ts +222 -0
  92. package/src/rules/no-missing-security-headers/index.ts +266 -0
  93. package/src/rules/no-missing-security-headers/no-missing-security-headers.test.ts +98 -0
  94. package/src/rules/no-password-in-url/index.ts +64 -0
  95. package/src/rules/no-password-in-url/no-password-in-url.test.ts +27 -0
  96. package/src/rules/no-permissive-cors/index.ts +78 -0
  97. package/src/rules/no-permissive-cors/no-permissive-cors.test.ts +28 -0
  98. package/src/rules/no-pii-in-logs/index.ts +83 -0
  99. package/src/rules/no-pii-in-logs/no-pii-in-logs.test.ts +26 -0
  100. package/src/rules/no-postmessage-origin-wildcard/index.ts +67 -0
  101. package/src/rules/no-postmessage-origin-wildcard/no-postmessage-origin-wildcard.test.ts +27 -0
  102. package/src/rules/no-privilege-escalation/index.ts +403 -0
  103. package/src/rules/no-privilege-escalation/no-privilege-escalation.test.ts +306 -0
  104. package/src/rules/no-redos-vulnerable-regex/index.ts +379 -0
  105. package/src/rules/no-redos-vulnerable-regex/no-redos-vulnerable-regex.test.ts +83 -0
  106. package/src/rules/no-sensitive-data-exposure/index.ts +294 -0
  107. package/src/rules/no-sensitive-data-exposure/no-sensitive-data-exposure.test.ts +262 -0
  108. package/src/rules/no-sensitive-data-in-analytics/index.ts +73 -0
  109. package/src/rules/no-sensitive-data-in-analytics/no-sensitive-data-in-analytics.test.ts +42 -0
  110. package/src/rules/no-sensitive-data-in-cache/index.ts +59 -0
  111. package/src/rules/no-sensitive-data-in-cache/no-sensitive-data-in-cache.test.ts +32 -0
  112. package/src/rules/no-sql-injection/index.ts +424 -0
  113. package/src/rules/no-sql-injection/no-sql-injection.test.ts +303 -0
  114. package/src/rules/no-timing-attack/index.ts +552 -0
  115. package/src/rules/no-timing-attack/no-timing-attack.test.ts +348 -0
  116. package/src/rules/no-toctou-vulnerability/index.ts +250 -0
  117. package/src/rules/no-toctou-vulnerability/no-toctou-vulnerability.test.ts +60 -0
  118. package/src/rules/no-tracking-without-consent/index.ts +78 -0
  119. package/src/rules/no-tracking-without-consent/no-tracking-without-consent.test.ts +34 -0
  120. package/src/rules/no-unchecked-loop-condition/index.ts +781 -0
  121. package/src/rules/no-unchecked-loop-condition/no-unchecked-loop-condition.test.ts +459 -0
  122. package/src/rules/no-unencrypted-local-storage/index.ts +73 -0
  123. package/src/rules/no-unencrypted-local-storage/no-unencrypted-local-storage.test.ts +41 -0
  124. package/src/rules/no-unencrypted-transmission/index.ts +296 -0
  125. package/src/rules/no-unencrypted-transmission/no-unencrypted-transmission.test.ts +287 -0
  126. package/src/rules/no-unescaped-url-parameter/index.ts +424 -0
  127. package/src/rules/no-unescaped-url-parameter/no-unescaped-url-parameter.test.ts +263 -0
  128. package/src/rules/no-unlimited-resource-allocation/index.ts +767 -0
  129. package/src/rules/no-unlimited-resource-allocation/no-unlimited-resource-allocation.test.ts +544 -0
  130. package/src/rules/no-unsafe-deserialization/index.ts +593 -0
  131. package/src/rules/no-unsafe-deserialization/no-unsafe-deserialization.test.ts +310 -0
  132. package/src/rules/no-unsafe-dynamic-require/index.ts +125 -0
  133. package/src/rules/no-unsafe-dynamic-require/no-unsafe-dynamic-require.test.ts +151 -0
  134. package/src/rules/no-unsafe-regex-construction/index.ts +370 -0
  135. package/src/rules/no-unsafe-regex-construction/no-unsafe-regex-construction.test.ts +181 -0
  136. package/src/rules/no-unsanitized-html/index.ts +400 -0
  137. package/src/rules/no-unsanitized-html/no-unsanitized-html.test.ts +488 -0
  138. package/src/rules/no-unvalidated-deeplinks/index.ts +73 -0
  139. package/src/rules/no-unvalidated-deeplinks/no-unvalidated-deeplinks.test.ts +29 -0
  140. package/src/rules/no-unvalidated-user-input/index.ts +498 -0
  141. package/src/rules/no-unvalidated-user-input/no-unvalidated-user-input.test.ts +463 -0
  142. package/src/rules/no-verbose-error-messages/index.ts +83 -0
  143. package/src/rules/no-verbose-error-messages/no-verbose-error-messages.test.ts +34 -0
  144. package/src/rules/no-weak-crypto/index.ts +447 -0
  145. package/src/rules/no-weak-crypto/no-weak-crypto.test.ts +297 -0
  146. package/src/rules/no-weak-password-recovery/index.ts +509 -0
  147. package/src/rules/no-weak-password-recovery/no-weak-password-recovery.test.ts +184 -0
  148. package/src/rules/no-xpath-injection/index.ts +596 -0
  149. package/src/rules/no-xpath-injection/no-xpath-injection.test.ts +405 -0
  150. package/src/rules/no-xxe-injection/index.ts +342 -0
  151. package/src/rules/no-xxe-injection/no-xxe-injection.test.ts +122 -0
  152. package/src/rules/no-zip-slip/index.ts +526 -0
  153. package/src/rules/no-zip-slip/no-zip-slip.test.ts +305 -0
  154. package/src/rules/require-backend-authorization/index.ts +71 -0
  155. package/src/rules/require-backend-authorization/require-backend-authorization.test.ts +31 -0
  156. package/src/rules/require-code-minification/index.ts +54 -0
  157. package/src/rules/require-code-minification/require-code-minification.test.ts +30 -0
  158. package/src/rules/require-csp-headers/index.ts +74 -0
  159. package/src/rules/require-csp-headers/require-csp-headers.test.ts +34 -0
  160. package/src/rules/require-data-minimization/index.ts +65 -0
  161. package/src/rules/require-data-minimization/require-data-minimization.test.ts +31 -0
  162. package/src/rules/require-dependency-integrity/index.ts +78 -0
  163. package/src/rules/require-dependency-integrity/require-dependency-integrity.test.ts +44 -0
  164. package/src/rules/require-https-only/index.ts +75 -0
  165. package/src/rules/require-https-only/require-https-only.test.ts +26 -0
  166. package/src/rules/require-mime-type-validation/index.ts +77 -0
  167. package/src/rules/require-mime-type-validation/require-mime-type-validation.test.ts +32 -0
  168. package/src/rules/require-network-timeout/index.ts +58 -0
  169. package/src/rules/require-network-timeout/require-network-timeout.test.ts +26 -0
  170. package/src/rules/require-package-lock/index.ts +75 -0
  171. package/src/rules/require-package-lock/require-package-lock.test.ts +27 -0
  172. package/src/rules/require-secure-credential-storage/index.ts +60 -0
  173. package/src/rules/require-secure-credential-storage/require-secure-credential-storage.test.ts +26 -0
  174. package/src/rules/require-secure-defaults/index.ts +54 -0
  175. package/src/rules/require-secure-defaults/require-secure-defaults.test.ts +26 -0
  176. package/src/rules/require-secure-deletion/index.ts +52 -0
  177. package/src/rules/require-secure-deletion/require-secure-deletion.test.ts +29 -0
  178. package/src/rules/require-storage-encryption/index.ts +60 -0
  179. package/src/rules/require-storage-encryption/require-storage-encryption.test.ts +26 -0
  180. package/src/rules/require-url-validation/index.ts +85 -0
  181. package/src/rules/require-url-validation/require-url-validation.test.ts +32 -0
  182. package/src/types/{index.d.ts → index.ts} +157 -53
  183. package/src/index.d.ts +0 -32
  184. package/src/index.js +0 -465
  185. package/src/rules/database-injection/index.d.ts +0 -13
  186. package/src/rules/database-injection/index.js +0 -406
  187. package/src/rules/detect-child-process/index.d.ts +0 -11
  188. package/src/rules/detect-child-process/index.js +0 -529
  189. package/src/rules/detect-eval-with-expression/index.d.ts +0 -9
  190. package/src/rules/detect-eval-with-expression/index.js +0 -392
  191. package/src/rules/detect-mixed-content/index.d.ts +0 -8
  192. package/src/rules/detect-mixed-content/index.js +0 -44
  193. package/src/rules/detect-non-literal-fs-filename/index.d.ts +0 -7
  194. package/src/rules/detect-non-literal-fs-filename/index.js +0 -454
  195. package/src/rules/detect-non-literal-regexp/index.d.ts +0 -9
  196. package/src/rules/detect-non-literal-regexp/index.js +0 -403
  197. package/src/rules/detect-object-injection/index.d.ts +0 -11
  198. package/src/rules/detect-object-injection/index.js +0 -560
  199. package/src/rules/detect-suspicious-dependencies/index.d.ts +0 -8
  200. package/src/rules/detect-suspicious-dependencies/index.js +0 -71
  201. package/src/rules/detect-weak-password-validation/index.d.ts +0 -6
  202. package/src/rules/detect-weak-password-validation/index.js +0 -58
  203. package/src/rules/no-allow-arbitrary-loads/index.d.ts +0 -8
  204. package/src/rules/no-allow-arbitrary-loads/index.js +0 -47
  205. package/src/rules/no-arbitrary-file-access/index.d.ts +0 -13
  206. package/src/rules/no-arbitrary-file-access/index.js +0 -195
  207. package/src/rules/no-buffer-overread/index.d.ts +0 -29
  208. package/src/rules/no-buffer-overread/index.js +0 -606
  209. package/src/rules/no-clickjacking/index.d.ts +0 -10
  210. package/src/rules/no-clickjacking/index.js +0 -396
  211. package/src/rules/no-client-side-auth-logic/index.d.ts +0 -6
  212. package/src/rules/no-client-side-auth-logic/index.js +0 -69
  213. package/src/rules/no-credentials-in-query-params/index.d.ts +0 -8
  214. package/src/rules/no-credentials-in-query-params/index.js +0 -57
  215. package/src/rules/no-credentials-in-storage-api/index.d.ts +0 -6
  216. package/src/rules/no-credentials-in-storage-api/index.js +0 -54
  217. package/src/rules/no-data-in-temp-storage/index.d.ts +0 -6
  218. package/src/rules/no-data-in-temp-storage/index.js +0 -64
  219. package/src/rules/no-debug-code-in-production/index.d.ts +0 -8
  220. package/src/rules/no-debug-code-in-production/index.js +0 -51
  221. package/src/rules/no-directive-injection/index.d.ts +0 -12
  222. package/src/rules/no-directive-injection/index.js +0 -457
  223. package/src/rules/no-disabled-certificate-validation/index.d.ts +0 -6
  224. package/src/rules/no-disabled-certificate-validation/index.js +0 -61
  225. package/src/rules/no-document-cookie/index.d.ts +0 -5
  226. package/src/rules/no-document-cookie/index.js +0 -89
  227. package/src/rules/no-dynamic-dependency-loading/index.d.ts +0 -8
  228. package/src/rules/no-dynamic-dependency-loading/index.js +0 -51
  229. package/src/rules/no-electron-security-issues/index.d.ts +0 -10
  230. package/src/rules/no-electron-security-issues/index.js +0 -423
  231. package/src/rules/no-exposed-debug-endpoints/index.d.ts +0 -6
  232. package/src/rules/no-exposed-debug-endpoints/index.js +0 -62
  233. package/src/rules/no-exposed-sensitive-data/index.d.ts +0 -11
  234. package/src/rules/no-exposed-sensitive-data/index.js +0 -340
  235. package/src/rules/no-format-string-injection/index.d.ts +0 -17
  236. package/src/rules/no-format-string-injection/index.js +0 -660
  237. package/src/rules/no-graphql-injection/index.d.ts +0 -12
  238. package/src/rules/no-graphql-injection/index.js +0 -411
  239. package/src/rules/no-hardcoded-credentials/index.d.ts +0 -26
  240. package/src/rules/no-hardcoded-credentials/index.js +0 -376
  241. package/src/rules/no-hardcoded-session-tokens/index.d.ts +0 -6
  242. package/src/rules/no-hardcoded-session-tokens/index.js +0 -59
  243. package/src/rules/no-http-urls/index.d.ts +0 -12
  244. package/src/rules/no-http-urls/index.js +0 -114
  245. package/src/rules/no-improper-sanitization/index.d.ts +0 -12
  246. package/src/rules/no-improper-sanitization/index.js +0 -411
  247. package/src/rules/no-improper-type-validation/index.d.ts +0 -10
  248. package/src/rules/no-improper-type-validation/index.js +0 -475
  249. package/src/rules/no-insecure-comparison/index.d.ts +0 -7
  250. package/src/rules/no-insecure-comparison/index.js +0 -193
  251. package/src/rules/no-insecure-cookie-settings/index.d.ts +0 -9
  252. package/src/rules/no-insecure-cookie-settings/index.js +0 -306
  253. package/src/rules/no-insecure-jwt/index.d.ts +0 -10
  254. package/src/rules/no-insecure-jwt/index.js +0 -380
  255. package/src/rules/no-insecure-redirects/index.d.ts +0 -7
  256. package/src/rules/no-insecure-redirects/index.js +0 -216
  257. package/src/rules/no-insecure-websocket/index.d.ts +0 -6
  258. package/src/rules/no-insecure-websocket/index.js +0 -61
  259. package/src/rules/no-insufficient-postmessage-validation/index.d.ts +0 -14
  260. package/src/rules/no-insufficient-postmessage-validation/index.js +0 -392
  261. package/src/rules/no-insufficient-random/index.d.ts +0 -9
  262. package/src/rules/no-insufficient-random/index.js +0 -208
  263. package/src/rules/no-ldap-injection/index.d.ts +0 -10
  264. package/src/rules/no-ldap-injection/index.js +0 -455
  265. package/src/rules/no-missing-authentication/index.d.ts +0 -13
  266. package/src/rules/no-missing-authentication/index.js +0 -333
  267. package/src/rules/no-missing-cors-check/index.d.ts +0 -9
  268. package/src/rules/no-missing-cors-check/index.js +0 -399
  269. package/src/rules/no-missing-csrf-protection/index.d.ts +0 -11
  270. package/src/rules/no-missing-csrf-protection/index.js +0 -180
  271. package/src/rules/no-missing-security-headers/index.d.ts +0 -7
  272. package/src/rules/no-missing-security-headers/index.js +0 -218
  273. package/src/rules/no-password-in-url/index.d.ts +0 -8
  274. package/src/rules/no-password-in-url/index.js +0 -54
  275. package/src/rules/no-permissive-cors/index.d.ts +0 -8
  276. package/src/rules/no-permissive-cors/index.js +0 -65
  277. package/src/rules/no-pii-in-logs/index.d.ts +0 -8
  278. package/src/rules/no-pii-in-logs/index.js +0 -70
  279. package/src/rules/no-postmessage-origin-wildcard/index.d.ts +0 -8
  280. package/src/rules/no-postmessage-origin-wildcard/index.js +0 -56
  281. package/src/rules/no-privilege-escalation/index.d.ts +0 -13
  282. package/src/rules/no-privilege-escalation/index.js +0 -321
  283. package/src/rules/no-redos-vulnerable-regex/index.d.ts +0 -7
  284. package/src/rules/no-redos-vulnerable-regex/index.js +0 -306
  285. package/src/rules/no-sensitive-data-exposure/index.d.ts +0 -11
  286. package/src/rules/no-sensitive-data-exposure/index.js +0 -250
  287. package/src/rules/no-sensitive-data-in-analytics/index.d.ts +0 -8
  288. package/src/rules/no-sensitive-data-in-analytics/index.js +0 -62
  289. package/src/rules/no-sensitive-data-in-cache/index.d.ts +0 -8
  290. package/src/rules/no-sensitive-data-in-cache/index.js +0 -52
  291. package/src/rules/no-sql-injection/index.d.ts +0 -10
  292. package/src/rules/no-sql-injection/index.js +0 -335
  293. package/src/rules/no-timing-attack/index.d.ts +0 -10
  294. package/src/rules/no-timing-attack/index.js +0 -447
  295. package/src/rules/no-toctou-vulnerability/index.d.ts +0 -7
  296. package/src/rules/no-toctou-vulnerability/index.js +0 -208
  297. package/src/rules/no-tracking-without-consent/index.d.ts +0 -6
  298. package/src/rules/no-tracking-without-consent/index.js +0 -67
  299. package/src/rules/no-unchecked-loop-condition/index.d.ts +0 -12
  300. package/src/rules/no-unchecked-loop-condition/index.js +0 -646
  301. package/src/rules/no-unencrypted-local-storage/index.d.ts +0 -8
  302. package/src/rules/no-unencrypted-local-storage/index.js +0 -61
  303. package/src/rules/no-unencrypted-transmission/index.d.ts +0 -11
  304. package/src/rules/no-unencrypted-transmission/index.js +0 -236
  305. package/src/rules/no-unescaped-url-parameter/index.d.ts +0 -9
  306. package/src/rules/no-unescaped-url-parameter/index.js +0 -355
  307. package/src/rules/no-unlimited-resource-allocation/index.d.ts +0 -12
  308. package/src/rules/no-unlimited-resource-allocation/index.js +0 -643
  309. package/src/rules/no-unsafe-deserialization/index.d.ts +0 -10
  310. package/src/rules/no-unsafe-deserialization/index.js +0 -491
  311. package/src/rules/no-unsafe-dynamic-require/index.d.ts +0 -5
  312. package/src/rules/no-unsafe-dynamic-require/index.js +0 -106
  313. package/src/rules/no-unsafe-regex-construction/index.d.ts +0 -9
  314. package/src/rules/no-unsafe-regex-construction/index.js +0 -291
  315. package/src/rules/no-unsanitized-html/index.d.ts +0 -9
  316. package/src/rules/no-unsanitized-html/index.js +0 -335
  317. package/src/rules/no-unvalidated-deeplinks/index.d.ts +0 -6
  318. package/src/rules/no-unvalidated-deeplinks/index.js +0 -62
  319. package/src/rules/no-unvalidated-user-input/index.d.ts +0 -9
  320. package/src/rules/no-unvalidated-user-input/index.js +0 -420
  321. package/src/rules/no-verbose-error-messages/index.d.ts +0 -8
  322. package/src/rules/no-verbose-error-messages/index.js +0 -68
  323. package/src/rules/no-weak-crypto/index.d.ts +0 -11
  324. package/src/rules/no-weak-crypto/index.js +0 -351
  325. package/src/rules/no-weak-password-recovery/index.d.ts +0 -12
  326. package/src/rules/no-weak-password-recovery/index.js +0 -424
  327. package/src/rules/no-xpath-injection/index.d.ts +0 -10
  328. package/src/rules/no-xpath-injection/index.js +0 -487
  329. package/src/rules/no-xxe-injection/index.d.ts +0 -7
  330. package/src/rules/no-xxe-injection/index.js +0 -266
  331. package/src/rules/no-zip-slip/index.d.ts +0 -9
  332. package/src/rules/no-zip-slip/index.js +0 -445
  333. package/src/rules/require-backend-authorization/index.d.ts +0 -6
  334. package/src/rules/require-backend-authorization/index.js +0 -60
  335. package/src/rules/require-code-minification/index.d.ts +0 -8
  336. package/src/rules/require-code-minification/index.js +0 -47
  337. package/src/rules/require-csp-headers/index.d.ts +0 -6
  338. package/src/rules/require-csp-headers/index.js +0 -64
  339. package/src/rules/require-data-minimization/index.d.ts +0 -8
  340. package/src/rules/require-data-minimization/index.js +0 -53
  341. package/src/rules/require-dependency-integrity/index.d.ts +0 -6
  342. package/src/rules/require-dependency-integrity/index.js +0 -64
  343. package/src/rules/require-https-only/index.d.ts +0 -8
  344. package/src/rules/require-https-only/index.js +0 -62
  345. package/src/rules/require-mime-type-validation/index.d.ts +0 -6
  346. package/src/rules/require-mime-type-validation/index.js +0 -66
  347. package/src/rules/require-network-timeout/index.d.ts +0 -8
  348. package/src/rules/require-network-timeout/index.js +0 -50
  349. package/src/rules/require-package-lock/index.d.ts +0 -8
  350. package/src/rules/require-package-lock/index.js +0 -63
  351. package/src/rules/require-secure-credential-storage/index.d.ts +0 -8
  352. package/src/rules/require-secure-credential-storage/index.js +0 -50
  353. package/src/rules/require-secure-defaults/index.d.ts +0 -8
  354. package/src/rules/require-secure-defaults/index.js +0 -47
  355. package/src/rules/require-secure-deletion/index.d.ts +0 -8
  356. package/src/rules/require-secure-deletion/index.js +0 -44
  357. package/src/rules/require-storage-encryption/index.d.ts +0 -8
  358. package/src/rules/require-storage-encryption/index.js +0 -50
  359. package/src/rules/require-url-validation/index.d.ts +0 -6
  360. package/src/rules/require-url-validation/index.js +0 -72
  361. package/src/types/index.js +0 -17
@@ -1,351 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.noWeakCrypto = void 0;
4
- const eslint_devkit_1 = require("@interlace/eslint-devkit");
5
- const eslint_devkit_2 = require("@interlace/eslint-devkit");
6
- const WEAK_CRYPTO_PATTERNS = [
7
- {
8
- pattern: /\bmd5\b/i,
9
- name: 'MD5',
10
- category: 'hash',
11
- alternatives: ['SHA-256', 'SHA-512', 'SHA-3'],
12
- example: {
13
- bad: 'crypto.createHash("md5").update(data)',
14
- good: 'crypto.createHash("sha256").update(data)'
15
- },
16
- effort: '5 minutes'
17
- },
18
- {
19
- pattern: /\bsha1\b/i,
20
- name: 'SHA-1',
21
- category: 'hash',
22
- alternatives: ['SHA-256', 'SHA-512', 'SHA-3'],
23
- example: {
24
- bad: 'crypto.createHash("sha1").update(data)',
25
- good: 'crypto.createHash("sha256").update(data)'
26
- },
27
- effort: '5 minutes'
28
- },
29
- {
30
- pattern: /\bdes\b/i,
31
- name: 'DES',
32
- category: 'encryption',
33
- alternatives: ['AES-256', 'ChaCha20-Poly1305'],
34
- example: {
35
- bad: 'crypto.createCipher("des", key)',
36
- good: 'crypto.createCipheriv("aes-256-gcm", key, iv)'
37
- },
38
- effort: '15 minutes'
39
- },
40
- {
41
- pattern: /\b3des\b|\btripledes\b/i,
42
- name: '3DES',
43
- category: 'encryption',
44
- alternatives: ['AES-256', 'ChaCha20-Poly1305'],
45
- example: {
46
- bad: 'crypto.createCipher("des-ede3", key)',
47
- good: 'crypto.createCipheriv("aes-256-gcm", key, iv)'
48
- },
49
- effort: '15 minutes'
50
- },
51
- {
52
- pattern: /\brc4\b/i,
53
- name: 'RC4',
54
- category: 'encryption',
55
- alternatives: ['AES-256', 'ChaCha20-Poly1305'],
56
- example: {
57
- bad: 'crypto.createCipher("rc4", key)',
58
- good: 'crypto.createCipheriv("aes-256-gcm", key, iv)'
59
- },
60
- effort: '15 minutes'
61
- }
62
- ];
63
- /**
64
- * Check if a string contains a weak crypto algorithm
65
- */
66
- function containsWeakCrypto(value, additionalPatterns) {
67
- // Check standard patterns
68
- for (const pattern of WEAK_CRYPTO_PATTERNS) {
69
- if (pattern.pattern.test(value)) {
70
- return pattern;
71
- }
72
- }
73
- // Check additional patterns
74
- for (const additionalPattern of additionalPatterns) {
75
- const regex = new RegExp(`\\b${additionalPattern}\\b`, 'i');
76
- if (regex.test(value)) {
77
- return {
78
- pattern: regex,
79
- name: additionalPattern,
80
- category: 'hash',
81
- alternatives: ['SHA-256', 'SHA-512'],
82
- example: {
83
- bad: `crypto.createHash("${additionalPattern}").update(data)`,
84
- good: 'crypto.createHash("sha256").update(data)'
85
- },
86
- effort: '10 minutes'
87
- };
88
- }
89
- }
90
- return null;
91
- }
92
- /**
93
- * Generate refactoring suggestions based on the weak crypto pattern
94
- */
95
- function generateRefactoringSteps(pattern, context) {
96
- const suggestions = [];
97
- if (pattern.category === 'hash') {
98
- suggestions.push({
99
- messageId: 'useSha256',
100
- fix: `Use SHA-256: crypto.createHash("sha256").update(${context})`
101
- });
102
- }
103
- else if (pattern.category === 'encryption') {
104
- suggestions.push({
105
- messageId: 'useAes256',
106
- fix: `Use AES-256-GCM: crypto.createCipheriv("aes-256-gcm", key, iv)`
107
- });
108
- }
109
- if (pattern.category === 'password') {
110
- suggestions.push({
111
- messageId: 'useBcrypt',
112
- fix: 'Use bcrypt: bcrypt.hash(password, 10)'
113
- });
114
- suggestions.push({
115
- messageId: 'useScrypt',
116
- fix: 'Use scrypt: crypto.scrypt(password, salt, 64)'
117
- });
118
- suggestions.push({
119
- messageId: 'useArgon2',
120
- fix: 'Use Argon2: argon2.hash(password)'
121
- });
122
- }
123
- return suggestions;
124
- }
125
- exports.noWeakCrypto = (0, eslint_devkit_2.createRule)({
126
- name: 'no-weak-crypto',
127
- meta: {
128
- type: 'problem',
129
- deprecated: true,
130
- replacedBy: ['@see eslint-plugin-crypto for 24 crypto security rules'],
131
- docs: {
132
- description: 'Detects use of weak cryptography algorithms (MD5, SHA1, DES)',
133
- },
134
- hasSuggestions: true,
135
- messages: {
136
- weakCrypto: (0, eslint_devkit_1.formatLLMMessage)({
137
- icon: eslint_devkit_1.MessageIcons.SECURITY,
138
- issueName: 'Weak cryptography',
139
- cwe: 'CWE-327',
140
- description: 'Use of weak cryptography algorithm: {{algorithm}}',
141
- severity: 'CRITICAL',
142
- fix: '{{safeAlternative}}',
143
- documentationLink: 'https://owasp.org/www-community/vulnerabilities/Weak_Cryptography',
144
- }),
145
- useSha256: (0, eslint_devkit_1.formatLLMMessage)({
146
- icon: eslint_devkit_1.MessageIcons.INFO,
147
- issueName: 'Use SHA-256',
148
- description: 'Use SHA-256 for hashing',
149
- severity: 'LOW',
150
- fix: 'crypto.createHash("sha256").update(data)',
151
- documentationLink: 'https://nodejs.org/api/crypto.html#cryptocreatehashmethod-options',
152
- }),
153
- useBcrypt: (0, eslint_devkit_1.formatLLMMessage)({
154
- icon: eslint_devkit_1.MessageIcons.INFO,
155
- issueName: 'Use bcrypt',
156
- description: 'Use bcrypt for password hashing',
157
- severity: 'LOW',
158
- fix: 'bcrypt.hash(password, 10)',
159
- documentationLink: 'https://github.com/kelektiv/node.bcrypt.js',
160
- }),
161
- useScrypt: (0, eslint_devkit_1.formatLLMMessage)({
162
- icon: eslint_devkit_1.MessageIcons.INFO,
163
- issueName: 'Use scrypt',
164
- description: 'Use scrypt for password hashing',
165
- severity: 'LOW',
166
- fix: 'crypto.scrypt(password, salt, 64)',
167
- documentationLink: 'https://nodejs.org/api/crypto.html#cryptoscryptpassword-salt-keylen-options-callback',
168
- }),
169
- useArgon2: (0, eslint_devkit_1.formatLLMMessage)({
170
- icon: eslint_devkit_1.MessageIcons.INFO,
171
- issueName: 'Use Argon2',
172
- description: 'Use Argon2 for password hashing',
173
- severity: 'LOW',
174
- fix: 'argon2.hash(password)',
175
- documentationLink: 'https://github.com/ranisalt/node-argon2',
176
- }),
177
- useAes256: (0, eslint_devkit_1.formatLLMMessage)({
178
- icon: eslint_devkit_1.MessageIcons.INFO,
179
- issueName: 'Use AES-256-GCM',
180
- description: 'Use AES-256-GCM for encryption',
181
- severity: 'LOW',
182
- fix: 'Use crypto.createCipheriv("aes-256-gcm", key, iv)',
183
- documentationLink: 'https://nodejs.org/api/crypto.html#cryptocreatecipherivalgorithm-key-iv-options',
184
- }),
185
- strategyAuto: (0, eslint_devkit_1.formatLLMMessage)({
186
- icon: eslint_devkit_1.MessageIcons.INFO,
187
- issueName: 'Auto-fix Strategy',
188
- description: 'Automatically suggest the best replacement',
189
- severity: 'LOW',
190
- fix: 'Apply automatic fix suggestion',
191
- documentationLink: 'https://owasp.org/www-community/vulnerabilities/Weak_Cryptography',
192
- }),
193
- strategyUpgrade: (0, eslint_devkit_1.formatLLMMessage)({
194
- icon: eslint_devkit_1.MessageIcons.INFO,
195
- issueName: 'Upgrade Strategy',
196
- description: 'Upgrade to a stronger algorithm',
197
- severity: 'LOW',
198
- fix: 'Replace weak algorithm with stronger alternative',
199
- documentationLink: 'https://owasp.org/www-community/vulnerabilities/Weak_Cryptography',
200
- }),
201
- strategyMigrate: (0, eslint_devkit_1.formatLLMMessage)({
202
- icon: eslint_devkit_1.MessageIcons.INFO,
203
- issueName: 'Migration Strategy',
204
- description: 'Plan migration to stronger cryptography',
205
- severity: 'LOW',
206
- fix: 'Create migration plan for cryptographic upgrade',
207
- documentationLink: 'https://owasp.org/www-community/vulnerabilities/Weak_Cryptography',
208
- }),
209
- strategyPolicy: (0, eslint_devkit_1.formatLLMMessage)({
210
- icon: eslint_devkit_1.MessageIcons.INFO,
211
- issueName: 'Policy Strategy',
212
- description: 'Apply organizational security policy',
213
- severity: 'LOW',
214
- fix: 'crypto.createCipheriv("aes-256-gcm", key, iv)',
215
- documentationLink: 'https://nodejs.org/api/crypto.html#cryptocreatecipherivalgorithm-key-iv-options',
216
- }),
217
- },
218
- schema: [
219
- {
220
- type: 'object',
221
- properties: {
222
- allowInTests: {
223
- type: 'boolean',
224
- default: false,
225
- description: 'Allow weak crypto in test files',
226
- },
227
- additionalWeakAlgorithms: {
228
- type: 'array',
229
- items: { type: 'string' },
230
- default: [],
231
- description: 'Additional weak algorithms to detect',
232
- },
233
- trustedLibraries: {
234
- type: 'array',
235
- items: { type: 'string' },
236
- default: ['crypto', 'crypto-js'],
237
- description: 'Trusted crypto libraries',
238
- },
239
- },
240
- additionalProperties: false,
241
- },
242
- ],
243
- },
244
- defaultOptions: [
245
- {
246
- allowInTests: false,
247
- additionalWeakAlgorithms: [],
248
- trustedLibraries: ['crypto', 'crypto-js'],
249
- },
250
- ],
251
- create(context, [options = {}]) {
252
- const { allowInTests = false, additionalWeakAlgorithms = [], trustedLibraries = ['crypto', 'crypto-js'], } = options;
253
- const filename = context.getFilename();
254
- const isTestFile = allowInTests && /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(filename);
255
- /**
256
- * Check if a call expression uses weak crypto
257
- */
258
- function checkCallExpression(node) {
259
- if (isTestFile) {
260
- return;
261
- }
262
- // Check for crypto.createHash, crypto.createCipher, etc.
263
- if (node.callee.type === 'MemberExpression') {
264
- // Check if it's a crypto method call (e.g., crypto.createHash, crypto.createCipher)
265
- if (node.callee.object.type === 'Identifier' &&
266
- node.callee.property.type === 'Identifier') {
267
- const objectName = node.callee.object.name;
268
- const methodName = node.callee.property.name;
269
- // Check if it's a crypto method from a trusted library
270
- const isCryptoMethod = (methodName === 'createHash' ||
271
- methodName === 'createCipher' ||
272
- methodName === 'createCipheriv') &&
273
- (trustedLibraries.includes(objectName) || objectName === 'crypto');
274
- if (isCryptoMethod) {
275
- // Check arguments for weak algorithms
276
- for (const arg of node.arguments) {
277
- if (arg.type === 'Literal' && typeof arg.value === 'string') {
278
- const weakPattern = containsWeakCrypto(arg.value, additionalWeakAlgorithms);
279
- if (weakPattern) {
280
- const safeAlternative = weakPattern.alternatives[0];
281
- const refactoringSteps = generateRefactoringSteps(weakPattern, 'data');
282
- context.report({
283
- node: arg,
284
- messageId: 'weakCrypto',
285
- data: {
286
- algorithm: weakPattern.name,
287
- safeAlternative: `Use ${safeAlternative}: ${weakPattern.example.good}`,
288
- },
289
- suggest: refactoringSteps.map(step => ({
290
- messageId: step.messageId,
291
- fix: (fixer) => {
292
- // Replace the weak algorithm with a safe one
293
- if (weakPattern.category === 'hash') {
294
- return fixer.replaceText(arg, `"sha256"`);
295
- }
296
- else if (weakPattern.category === 'encryption') {
297
- return fixer.replaceText(arg, `"aes-256-gcm"`);
298
- }
299
- return null;
300
- },
301
- })),
302
- });
303
- }
304
- }
305
- }
306
- }
307
- }
308
- }
309
- // Check for standalone crypto function calls (e.g., createHash, createCipher)
310
- if (node.callee.type === 'Identifier') {
311
- const calleeName = node.callee.name;
312
- // Check for common crypto library patterns
313
- if (calleeName === 'createHash' || calleeName === 'createCipher' || calleeName === 'createCipheriv') {
314
- for (const arg of node.arguments) {
315
- if (arg.type === 'Literal' && typeof arg.value === 'string') {
316
- const weakPattern = containsWeakCrypto(arg.value, additionalWeakAlgorithms);
317
- if (weakPattern) {
318
- const safeAlternative = weakPattern.alternatives[0];
319
- context.report({
320
- node: arg,
321
- messageId: 'weakCrypto',
322
- data: {
323
- algorithm: weakPattern.name,
324
- safeAlternative: `Use ${safeAlternative}: ${weakPattern.example.good}`,
325
- },
326
- suggest: [
327
- {
328
- messageId: weakPattern.category === 'hash' ? 'useSha256' : 'useAes256',
329
- fix: (fixer) => {
330
- if (weakPattern.category === 'hash') {
331
- return fixer.replaceText(arg, `"sha256"`);
332
- }
333
- else if (weakPattern.category === 'encryption') {
334
- return fixer.replaceText(arg, `"aes-256-gcm"`);
335
- }
336
- return null;
337
- },
338
- },
339
- ],
340
- });
341
- }
342
- }
343
- }
344
- }
345
- }
346
- }
347
- return {
348
- CallExpression: checkCallExpression,
349
- };
350
- },
351
- });
@@ -1,12 +0,0 @@
1
- import { type SecurityRuleOptions } from '@interlace/eslint-devkit';
2
- export interface Options extends SecurityRuleOptions {
3
- /** Minimum token entropy bits */
4
- minTokenEntropy?: number;
5
- /** Maximum token lifetime in hours */
6
- maxTokenLifetimeHours?: number;
7
- /** Recovery-related keywords */
8
- recoveryKeywords?: string[];
9
- /** Secure token generation functions */
10
- secureTokenFunctions?: string[];
11
- }
12
- export declare const noWeakPasswordRecovery: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;