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,218 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.noMissingSecurityHeaders = void 0;
4
- const eslint_devkit_1 = require("@interlace/eslint-devkit");
5
- const eslint_devkit_2 = require("@interlace/eslint-devkit");
6
- const DEFAULT_REQUIRED_HEADERS = [
7
- 'Content-Security-Policy',
8
- 'X-Frame-Options',
9
- 'X-Content-Type-Options',
10
- ];
11
- /**
12
- * Extract header name from setHeader call
13
- */
14
- function extractHeaderName(node) {
15
- if (node.arguments.length > 0 && node.arguments[0].type === 'Literal') {
16
- return String(node.arguments[0].value);
17
- }
18
- return null;
19
- }
20
- /**
21
- * Check if all security headers are set in the current scope
22
- */
23
- function checkFunctionForSecurityHeaders(node, requiredHeaders, context) {
24
- const setHeaders = new Set();
25
- // Find the function that contains this setHeader call
26
- let current = node;
27
- let scopeNode = null;
28
- while (current) {
29
- if (current.type === 'FunctionDeclaration' ||
30
- current.type === 'FunctionExpression' ||
31
- current.type === 'ArrowFunctionExpression') {
32
- scopeNode = current;
33
- break;
34
- }
35
- current = current.parent ?? null;
36
- }
37
- // If no function found, use the program scope (for test cases)
38
- if (!scopeNode) {
39
- scopeNode = context.sourceCode.ast;
40
- }
41
- // Collect all setHeader calls in this scope
42
- function collectHeaders(node) {
43
- if (node.type === 'CallExpression' &&
44
- node.callee.type === 'MemberExpression' &&
45
- node.callee.property.type === 'Identifier' &&
46
- ['setHeader', 'header', 'set'].includes(node.callee.property.name)) {
47
- const headerName = extractHeaderName(node);
48
- if (headerName) {
49
- setHeaders.add(headerName);
50
- }
51
- }
52
- // Recursively check children - only traverse standard AST properties
53
- if (node.type === 'Program' && node.body) {
54
- node.body.forEach(collectHeaders);
55
- }
56
- else if ((node.type === 'FunctionDeclaration' ||
57
- node.type === 'FunctionExpression' ||
58
- node.type === 'ArrowFunctionExpression') && node.body) {
59
- collectHeaders(node.body);
60
- }
61
- else if (node.type === 'BlockStatement' && node.body) {
62
- node.body.forEach(collectHeaders);
63
- }
64
- else if (node.type === 'ExpressionStatement' && node.expression) {
65
- collectHeaders(node.expression);
66
- }
67
- }
68
- if (scopeNode) {
69
- collectHeaders(scopeNode);
70
- }
71
- // Return missing headers
72
- return requiredHeaders.filter(header => !setHeaders.has(header));
73
- }
74
- exports.noMissingSecurityHeaders = (0, eslint_devkit_2.createRule)({
75
- name: 'no-missing-security-headers',
76
- meta: {
77
- type: 'problem',
78
- deprecated: true,
79
- replacedBy: ['@see eslint-plugin-express-security/require-helmet'],
80
- docs: {
81
- description: 'Detects missing security headers in HTTP responses',
82
- },
83
- hasSuggestions: true,
84
- messages: {
85
- missingSecurityHeader: (0, eslint_devkit_1.formatLLMMessage)({
86
- icon: eslint_devkit_1.MessageIcons.SECURITY,
87
- issueName: 'Missing security headers',
88
- cwe: 'CWE-693',
89
- description: 'Missing security headers: {{headers}}',
90
- severity: 'HIGH',
91
- fix: 'Set security headers: Content-Security-Policy, X-Frame-Options, X-Content-Type-Options',
92
- documentationLink: 'https://owasp.org/www-project-secure-headers/',
93
- }),
94
- addSecurityHeaders: (0, eslint_devkit_1.formatLLMMessage)({
95
- icon: eslint_devkit_1.MessageIcons.INFO,
96
- issueName: 'Add Security Headers',
97
- description: 'Add security headers middleware',
98
- severity: 'LOW',
99
- fix: 'Add Content-Security-Policy, X-Frame-Options headers',
100
- documentationLink: 'https://owasp.org/www-project-secure-headers/',
101
- }),
102
- useMiddleware: (0, eslint_devkit_1.formatLLMMessage)({
103
- icon: eslint_devkit_1.MessageIcons.INFO,
104
- issueName: 'Use Helmet',
105
- description: 'Use helmet.js for security headers',
106
- severity: 'LOW',
107
- fix: 'app.use(helmet())',
108
- documentationLink: 'https://helmetjs.github.io/',
109
- }),
110
- setHeader: (0, eslint_devkit_1.formatLLMMessage)({
111
- icon: eslint_devkit_1.MessageIcons.INFO,
112
- issueName: 'Set Headers',
113
- description: 'Set security headers manually',
114
- severity: 'LOW',
115
- fix: 'res.setHeader("X-Frame-Options", "DENY")',
116
- documentationLink: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers',
117
- }),
118
- },
119
- schema: [
120
- {
121
- type: 'object',
122
- properties: {
123
- requiredHeaders: {
124
- type: 'array',
125
- items: { type: 'string' },
126
- default: DEFAULT_REQUIRED_HEADERS,
127
- },
128
- ignoreInTests: {
129
- type: 'boolean',
130
- default: true,
131
- },
132
- },
133
- additionalProperties: false,
134
- },
135
- ],
136
- },
137
- defaultOptions: [
138
- {
139
- requiredHeaders: DEFAULT_REQUIRED_HEADERS,
140
- ignoreInTests: true,
141
- },
142
- ],
143
- create(context, [options = {}]) {
144
- const { requiredHeaders = DEFAULT_REQUIRED_HEADERS, ignoreInTests = true, } = options || {};
145
- const filename = context.getFilename();
146
- const isTestFile = ignoreInTests && /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(filename);
147
- if (isTestFile) {
148
- return {};
149
- }
150
- const reportedScopes = new Set();
151
- /**
152
- * Get a unique key for the current scope
153
- */
154
- function getScopeKey(node) {
155
- // Find the function that contains this call
156
- let current = node;
157
- while (current) {
158
- if (current.type === 'FunctionDeclaration' ||
159
- current.type === 'FunctionExpression' ||
160
- current.type === 'ArrowFunctionExpression') {
161
- return `${current.range?.[0]}-${current.range?.[1]}`;
162
- }
163
- current = current.parent ?? null;
164
- }
165
- // If no function found, use program scope
166
- return 'program';
167
- }
168
- /**
169
- * Check for response header setting
170
- */
171
- function checkCallExpression(node) {
172
- // Check for res.setHeader, res.header, res.set
173
- if (node.callee.type === 'MemberExpression' &&
174
- node.callee.property.type === 'Identifier') {
175
- const methodName = node.callee.property.name;
176
- if (['setHeader', 'header', 'set'].includes(methodName)) {
177
- const scopeKey = getScopeKey(node);
178
- // Only check once per scope
179
- if (reportedScopes.has(scopeKey)) {
180
- return;
181
- }
182
- const missing = checkFunctionForSecurityHeaders(node, requiredHeaders, context);
183
- if (missing.length > 0) {
184
- reportedScopes.add(scopeKey);
185
- context.report({
186
- node,
187
- messageId: 'missingSecurityHeader',
188
- data: {
189
- headers: missing.join(', '),
190
- },
191
- suggest: [
192
- {
193
- messageId: 'addSecurityHeaders',
194
- fix: () => null,
195
- },
196
- {
197
- messageId: 'useMiddleware',
198
- fix: () => null,
199
- },
200
- {
201
- messageId: 'setHeader',
202
- fix: () => null,
203
- },
204
- ],
205
- });
206
- }
207
- else {
208
- // Mark as checked even if no error
209
- reportedScopes.add(scopeKey);
210
- }
211
- }
212
- }
213
- }
214
- return {
215
- CallExpression: checkCallExpression,
216
- };
217
- },
218
- });
@@ -1,8 +0,0 @@
1
- /**
2
- * @fileoverview Prevent passwords in URLs
3
- * @see https://owasp.org/www-project-mobile-top-10/
4
- * @see https://cwe.mitre.org/data/definitions/598.html
5
- */
6
- export interface Options {
7
- }
8
- export declare const noPasswordInUrl: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Prevent passwords in URLs
4
- * @see https://owasp.org/www-project-mobile-top-10/
5
- * @see https://cwe.mitre.org/data/definitions/598.html
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.noPasswordInUrl = void 0;
9
- const eslint_devkit_1 = require("@interlace/eslint-devkit");
10
- exports.noPasswordInUrl = (0, eslint_devkit_1.createRule)({
11
- name: 'no-password-in-url',
12
- meta: {
13
- type: 'problem',
14
- docs: {
15
- description: 'Prevent passwords in URLs',
16
- category: 'Security',
17
- recommended: true,
18
- owaspMobile: ['M3'],
19
- cweIds: ["CWE-598"],
20
- },
21
- messages: {
22
- violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
23
- icon: eslint_devkit_1.MessageIcons.SECURITY,
24
- issueName: 'violation Detected',
25
- cwe: 'CWE-521',
26
- description: 'Prevent passwords in URLs detected - this is a security risk',
27
- severity: 'CRITICAL',
28
- fix: 'Review and apply secure practices',
29
- documentationLink: 'https://cwe.mitre.org/data/definitions/521.html',
30
- })
31
- },
32
- schema: [],
33
- },
34
- defaultOptions: [],
35
- create(context) {
36
- function report(node) {
37
- context.report({
38
- node,
39
- messageId: 'violationDetected',
40
- });
41
- }
42
- return {
43
- Literal(node) {
44
- // Check for http://user:password@host patterns
45
- if (node.type === 'Literal' && typeof node.value === 'string') {
46
- const urlPattern = /https?:\/\/[^:]+:[^@]+@/;
47
- if (urlPattern.test(node.value)) {
48
- report(node);
49
- }
50
- }
51
- },
52
- };
53
- },
54
- });
@@ -1,8 +0,0 @@
1
- /**
2
- * @fileoverview Prevent overly permissive CORS configuration
3
- * @see https://owasp.org/www-project-mobile-top-10/
4
- * @see https://cwe.mitre.org/data/definitions/942.html
5
- */
6
- export interface Options {
7
- }
8
- export declare const noPermissiveCors: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -1,65 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Prevent overly permissive CORS configuration
4
- * @see https://owasp.org/www-project-mobile-top-10/
5
- * @see https://cwe.mitre.org/data/definitions/942.html
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.noPermissiveCors = void 0;
9
- const eslint_devkit_1 = require("@interlace/eslint-devkit");
10
- exports.noPermissiveCors = (0, eslint_devkit_1.createRule)({
11
- name: 'no-permissive-cors',
12
- meta: {
13
- type: 'problem',
14
- deprecated: true,
15
- replacedBy: ['@see eslint-plugin-express-security/no-permissive-cors'],
16
- docs: {
17
- description: 'Prevent overly permissive CORS configuration',
18
- category: 'Security',
19
- recommended: true,
20
- owaspMobile: ['M8'],
21
- cweIds: ["CWE-942"],
22
- },
23
- messages: {
24
- violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
25
- icon: eslint_devkit_1.MessageIcons.SECURITY,
26
- issueName: 'violation Detected',
27
- cwe: 'CWE-942',
28
- description: 'Prevent overly permissive CORS configuration detected - this is a security risk',
29
- severity: 'HIGH',
30
- fix: 'Review and apply secure practices',
31
- documentationLink: 'https://cwe.mitre.org/data/definitions/942.html',
32
- })
33
- },
34
- schema: [],
35
- },
36
- defaultOptions: [],
37
- create(context) {
38
- function report(node) {
39
- context.report({
40
- node,
41
- messageId: 'violationDetected',
42
- });
43
- }
44
- return {
45
- CallExpression(node) {
46
- // Check for Access-Control-Allow-Origin: *
47
- if (node.type === eslint_devkit_1.AST_NODE_TYPES.CallExpression &&
48
- node.callee.property?.name === 'setHeader' &&
49
- node.arguments[0]?.value === 'Access-Control-Allow-Origin' &&
50
- node.arguments[1]?.value === '*') {
51
- report(node);
52
- }
53
- // Check cors({ origin: '*' })
54
- if (node.type === eslint_devkit_1.AST_NODE_TYPES.CallExpression &&
55
- node.callee.name === 'cors' &&
56
- node.arguments[0]?.type === eslint_devkit_1.AST_NODE_TYPES.ObjectExpression) {
57
- const originProp = node.arguments[0].properties.find(p => p.key?.name === 'origin');
58
- if (originProp?.value.type === 'Literal' && originProp.value.value === '*') {
59
- report(node);
60
- }
61
- }
62
- },
63
- };
64
- },
65
- });
@@ -1,8 +0,0 @@
1
- /**
2
- * @fileoverview Prevent PII (email, SSN, credit cards) in console logs
3
- * @see https://owasp.org/www-project-mobile-top-10/
4
- * @see https://cwe.mitre.org/data/definitions/532.html
5
- */
6
- export interface Options {
7
- }
8
- export declare const noPiiInLogs: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Prevent PII (email, SSN, credit cards) in console logs
4
- * @see https://owasp.org/www-project-mobile-top-10/
5
- * @see https://cwe.mitre.org/data/definitions/532.html
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.noPiiInLogs = void 0;
9
- const eslint_devkit_1 = require("@interlace/eslint-devkit");
10
- exports.noPiiInLogs = (0, eslint_devkit_1.createRule)({
11
- name: 'no-pii-in-logs',
12
- meta: {
13
- type: 'problem',
14
- docs: {
15
- description: 'Prevent PII (email, SSN, credit cards) in console logs',
16
- category: 'Security',
17
- recommended: true,
18
- owaspMobile: ['M6'],
19
- cweIds: ["CWE-532"],
20
- },
21
- messages: {
22
- violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
23
- icon: eslint_devkit_1.MessageIcons.SECURITY,
24
- issueName: 'violation Detected',
25
- cwe: 'CWE-359',
26
- description: 'Prevent PII (email, SSN, credit cards) in console logs detected - this is a security risk',
27
- severity: 'HIGH',
28
- fix: 'Review and apply secure practices',
29
- documentationLink: 'https://cwe.mitre.org/data/definitions/359.html',
30
- })
31
- },
32
- schema: [],
33
- },
34
- defaultOptions: [],
35
- create(context) {
36
- function report(node) {
37
- context.report({
38
- node,
39
- messageId: 'violationDetected',
40
- });
41
- }
42
- return {
43
- CallExpression(node) {
44
- // Check console.log/error/warn calls
45
- if (node.type === 'CallExpression' &&
46
- node.callee.type === 'MemberExpression' &&
47
- node.callee.object.name === 'console' &&
48
- ['log', 'error', 'warn', 'info'].includes(node.callee.property.name)) {
49
- // Check arguments for PII-related property access
50
- for (const arg of node.arguments) {
51
- if (arg.type === 'MemberExpression') {
52
- const propName = arg.property.name?.toLowerCase();
53
- const piiProps = ['email', 'ssn', 'password', 'creditcard', 'phone'];
54
- if (piiProps.some(p => propName?.includes(p))) {
55
- report(node);
56
- }
57
- }
58
- // Check string literals mentioning PII
59
- if (arg.type === 'Literal' && typeof arg.value === 'string') {
60
- const text = arg.value.toLowerCase();
61
- if (text.includes('email:') || text.includes('ssn:') || text.includes('password:')) {
62
- report(node);
63
- }
64
- }
65
- }
66
- }
67
- },
68
- };
69
- },
70
- });
@@ -1,8 +0,0 @@
1
- /**
2
- * @fileoverview Prevent wildcard origins in postMessage
3
- * @see https://owasp.org/www-project-mobile-top-10/
4
- * @see https://cwe.mitre.org/data/definitions/942.html
5
- */
6
- export interface Options {
7
- }
8
- export declare const noPostmessageOriginWildcard: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -1,56 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Prevent wildcard origins in postMessage
4
- * @see https://owasp.org/www-project-mobile-top-10/
5
- * @see https://cwe.mitre.org/data/definitions/942.html
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.noPostmessageOriginWildcard = void 0;
9
- const eslint_devkit_1 = require("@interlace/eslint-devkit");
10
- exports.noPostmessageOriginWildcard = (0, eslint_devkit_1.createRule)({
11
- name: 'no-postmessage-origin-wildcard',
12
- meta: {
13
- type: 'problem',
14
- docs: {
15
- description: 'Prevent wildcard origins in postMessage',
16
- category: 'Security',
17
- recommended: true,
18
- owaspMobile: ['M4'],
19
- cweIds: ["CWE-942"],
20
- },
21
- messages: {
22
- violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
23
- icon: eslint_devkit_1.MessageIcons.SECURITY,
24
- issueName: 'violation Detected',
25
- cwe: 'CWE-346',
26
- description: 'Prevent wildcard origins in postMessage detected - this is a security risk',
27
- severity: 'HIGH',
28
- fix: 'Review and apply secure practices',
29
- documentationLink: 'https://cwe.mitre.org/data/definitions/346.html',
30
- })
31
- },
32
- schema: [],
33
- },
34
- defaultOptions: [],
35
- create(context) {
36
- function report(node) {
37
- context.report({
38
- node,
39
- messageId: 'violationDetected',
40
- });
41
- }
42
- return {
43
- CallExpression(node) {
44
- // Check postMessage calls
45
- if (node.type === 'CallExpression' &&
46
- node.callee.type === 'MemberExpression' &&
47
- node.callee.property.name === 'postMessage') {
48
- const originArg = node.arguments[1];
49
- if (originArg && originArg.type === 'Literal' && originArg.value === '*') {
50
- report(node);
51
- }
52
- }
53
- },
54
- };
55
- },
56
- });
@@ -1,13 +0,0 @@
1
- export interface Options {
2
- /** Allow privilege escalation patterns in test files. Default: false */
3
- allowInTests?: boolean;
4
- /** Test file pattern regex string. Default: '\\.(test|spec)\\.(ts|tsx|js|jsx)$' */
5
- testFilePattern?: string;
6
- /** Role check patterns to recognize. Default: ['hasRole', 'checkRole', 'isAdmin', 'isAuthorized'] */
7
- roleCheckPatterns?: string[];
8
- /** User input patterns that should be validated. Default: ['req.body', 'req.query', 'req.params'] */
9
- userInputPatterns?: string[];
10
- /** Additional patterns to ignore. Default: [] */
11
- ignorePatterns?: string[];
12
- }
13
- export declare const noPrivilegeEscalation: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;