eslint-plugin-secure-coding 2.2.0 → 2.2.2

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 (318) hide show
  1. package/README.md +91 -12
  2. package/package.json +10 -4
  3. package/src/index.d.ts +1 -1
  4. package/src/index.js +223 -48
  5. package/src/index.js.map +1 -1
  6. package/src/rules/{security/database-injection.js → database-injection/index.js} +1 -1
  7. package/src/rules/database-injection/index.js.map +1 -0
  8. package/src/rules/{security/detect-child-process.js → detect-child-process/index.js} +1 -1
  9. package/src/rules/detect-child-process/index.js.map +1 -0
  10. package/src/rules/{security/detect-eval-with-expression.js → detect-eval-with-expression/index.js} +1 -1
  11. package/src/rules/detect-eval-with-expression/index.js.map +1 -0
  12. package/src/rules/detect-mixed-content/index.d.ts +8 -0
  13. package/src/rules/detect-mixed-content/index.js +45 -0
  14. package/src/rules/detect-mixed-content/index.js.map +1 -0
  15. package/src/rules/{security/detect-non-literal-fs-filename.js → detect-non-literal-fs-filename/index.js} +1 -1
  16. package/src/rules/detect-non-literal-fs-filename/index.js.map +1 -0
  17. package/src/rules/{security/detect-non-literal-regexp.js → detect-non-literal-regexp/index.js} +23 -6
  18. package/src/rules/detect-non-literal-regexp/index.js.map +1 -0
  19. package/src/rules/{security/detect-object-injection.js → detect-object-injection/index.js} +3 -1
  20. package/src/rules/detect-object-injection/index.js.map +1 -0
  21. package/src/rules/detect-suspicious-dependencies/index.d.ts +8 -0
  22. package/src/rules/detect-suspicious-dependencies/index.js +72 -0
  23. package/src/rules/detect-suspicious-dependencies/index.js.map +1 -0
  24. package/src/rules/detect-weak-password-validation/index.d.ts +6 -0
  25. package/src/rules/detect-weak-password-validation/index.js +59 -0
  26. package/src/rules/detect-weak-password-validation/index.js.map +1 -0
  27. package/src/rules/no-allow-arbitrary-loads/index.d.ts +8 -0
  28. package/src/rules/no-allow-arbitrary-loads/index.js +48 -0
  29. package/src/rules/no-allow-arbitrary-loads/index.js.map +1 -0
  30. package/src/rules/no-arbitrary-file-access/index.d.ts +6 -0
  31. package/src/rules/no-arbitrary-file-access/index.js +63 -0
  32. package/src/rules/no-arbitrary-file-access/index.js.map +1 -0
  33. package/src/rules/{security/no-buffer-overread.js → no-buffer-overread/index.js} +9 -5
  34. package/src/rules/no-buffer-overread/index.js.map +1 -0
  35. package/src/rules/{security/no-clickjacking.js → no-clickjacking/index.js} +23 -9
  36. package/src/rules/no-clickjacking/index.js.map +1 -0
  37. package/src/rules/no-client-side-auth-logic/index.d.ts +6 -0
  38. package/src/rules/no-client-side-auth-logic/index.js +70 -0
  39. package/src/rules/no-client-side-auth-logic/index.js.map +1 -0
  40. package/src/rules/no-credentials-in-query-params/index.d.ts +8 -0
  41. package/src/rules/no-credentials-in-query-params/index.js +58 -0
  42. package/src/rules/no-credentials-in-query-params/index.js.map +1 -0
  43. package/src/rules/no-credentials-in-storage-api/index.d.ts +6 -0
  44. package/src/rules/no-credentials-in-storage-api/index.js +55 -0
  45. package/src/rules/no-credentials-in-storage-api/index.js.map +1 -0
  46. package/src/rules/no-data-in-temp-storage/index.d.ts +6 -0
  47. package/src/rules/no-data-in-temp-storage/index.js +65 -0
  48. package/src/rules/no-data-in-temp-storage/index.js.map +1 -0
  49. package/src/rules/no-debug-code-in-production/index.d.ts +8 -0
  50. package/src/rules/no-debug-code-in-production/index.js +52 -0
  51. package/src/rules/no-debug-code-in-production/index.js.map +1 -0
  52. package/src/rules/{security/no-directive-injection.js → no-directive-injection/index.js} +17 -9
  53. package/src/rules/no-directive-injection/index.js.map +1 -0
  54. package/src/rules/no-disabled-certificate-validation/index.d.ts +6 -0
  55. package/src/rules/no-disabled-certificate-validation/index.js +62 -0
  56. package/src/rules/no-disabled-certificate-validation/index.js.map +1 -0
  57. package/src/rules/{security/no-document-cookie.js → no-document-cookie/index.js} +1 -1
  58. package/src/rules/no-document-cookie/index.js.map +1 -0
  59. package/src/rules/no-dynamic-dependency-loading/index.d.ts +8 -0
  60. package/src/rules/no-dynamic-dependency-loading/index.js +52 -0
  61. package/src/rules/no-dynamic-dependency-loading/index.js.map +1 -0
  62. package/src/rules/{security/no-electron-security-issues.js → no-electron-security-issues/index.js} +7 -4
  63. package/src/rules/no-electron-security-issues/index.js.map +1 -0
  64. package/src/rules/no-exposed-debug-endpoints/index.d.ts +6 -0
  65. package/src/rules/no-exposed-debug-endpoints/index.js +63 -0
  66. package/src/rules/no-exposed-debug-endpoints/index.js.map +1 -0
  67. package/src/rules/{security/no-exposed-sensitive-data.js → no-exposed-sensitive-data/index.js} +1 -1
  68. package/src/rules/no-exposed-sensitive-data/index.js.map +1 -0
  69. package/src/rules/{security/no-format-string-injection.js → no-format-string-injection/index.js} +17 -9
  70. package/src/rules/no-format-string-injection/index.js.map +1 -0
  71. package/src/rules/{security/no-graphql-injection.js → no-graphql-injection/index.js} +5 -3
  72. package/src/rules/no-graphql-injection/index.js.map +1 -0
  73. package/src/rules/{security/no-hardcoded-credentials.js → no-hardcoded-credentials/index.js} +1 -1
  74. package/src/rules/no-hardcoded-credentials/index.js.map +1 -0
  75. package/src/rules/no-hardcoded-session-tokens/index.d.ts +6 -0
  76. package/src/rules/no-hardcoded-session-tokens/index.js +60 -0
  77. package/src/rules/no-hardcoded-session-tokens/index.js.map +1 -0
  78. package/src/rules/no-http-urls/index.d.ts +12 -0
  79. package/src/rules/no-http-urls/index.js +115 -0
  80. package/src/rules/no-http-urls/index.js.map +1 -0
  81. package/src/rules/{security/no-improper-sanitization.js → no-improper-sanitization/index.js} +9 -5
  82. package/src/rules/no-improper-sanitization/index.js.map +1 -0
  83. package/src/rules/{security/no-improper-type-validation.js → no-improper-type-validation/index.js} +11 -6
  84. package/src/rules/no-improper-type-validation/index.js.map +1 -0
  85. package/src/rules/{security/no-insecure-comparison.js → no-insecure-comparison/index.js} +1 -1
  86. package/src/rules/no-insecure-comparison/index.js.map +1 -0
  87. package/src/rules/{security/no-insecure-cookie-settings.js → no-insecure-cookie-settings/index.js} +1 -1
  88. package/src/rules/no-insecure-cookie-settings/index.js.map +1 -0
  89. package/src/rules/{security/no-insecure-jwt.js → no-insecure-jwt/index.js} +3 -2
  90. package/src/rules/no-insecure-jwt/index.js.map +1 -0
  91. package/src/rules/{security/no-insecure-redirects.js → no-insecure-redirects/index.js} +3 -1
  92. package/src/rules/no-insecure-redirects/index.js.map +1 -0
  93. package/src/rules/no-insecure-websocket/index.d.ts +6 -0
  94. package/src/rules/no-insecure-websocket/index.js +62 -0
  95. package/src/rules/no-insecure-websocket/index.js.map +1 -0
  96. package/src/rules/{security/no-insufficient-postmessage-validation.js → no-insufficient-postmessage-validation/index.js} +7 -4
  97. package/src/rules/no-insufficient-postmessage-validation/index.js.map +1 -0
  98. package/src/rules/{security/no-insufficient-random.js → no-insufficient-random/index.js} +1 -1
  99. package/src/rules/no-insufficient-random/index.js.map +1 -0
  100. package/src/rules/{security/no-ldap-injection.js → no-ldap-injection/index.js} +15 -8
  101. package/src/rules/no-ldap-injection/index.js.map +1 -0
  102. package/src/rules/{security/no-missing-authentication.js → no-missing-authentication/index.js} +13 -1
  103. package/src/rules/no-missing-authentication/index.js.map +1 -0
  104. package/src/rules/{security/no-missing-cors-check.js → no-missing-cors-check/index.js} +1 -52
  105. package/src/rules/no-missing-cors-check/index.js.map +1 -0
  106. package/src/rules/{security/no-missing-csrf-protection.js → no-missing-csrf-protection/index.js} +1 -1
  107. package/src/rules/no-missing-csrf-protection/index.js.map +1 -0
  108. package/src/rules/{security/no-missing-security-headers.js → no-missing-security-headers/index.js} +1 -1
  109. package/src/rules/no-missing-security-headers/index.js.map +1 -0
  110. package/src/rules/no-password-in-url/index.d.ts +8 -0
  111. package/src/rules/no-password-in-url/index.js +56 -0
  112. package/src/rules/no-password-in-url/index.js.map +1 -0
  113. package/src/rules/no-permissive-cors/index.d.ts +8 -0
  114. package/src/rules/no-permissive-cors/index.js +65 -0
  115. package/src/rules/no-permissive-cors/index.js.map +1 -0
  116. package/src/rules/no-pii-in-logs/index.d.ts +8 -0
  117. package/src/rules/no-pii-in-logs/index.js +72 -0
  118. package/src/rules/no-pii-in-logs/index.js.map +1 -0
  119. package/src/rules/no-postmessage-origin-wildcard/index.d.ts +8 -0
  120. package/src/rules/no-postmessage-origin-wildcard/index.js +58 -0
  121. package/src/rules/no-postmessage-origin-wildcard/index.js.map +1 -0
  122. package/src/rules/{security/no-privilege-escalation.js → no-privilege-escalation/index.js} +3 -35
  123. package/src/rules/no-privilege-escalation/index.js.map +1 -0
  124. package/src/rules/{security/no-redos-vulnerable-regex.js → no-redos-vulnerable-regex/index.js} +1 -1
  125. package/src/rules/no-redos-vulnerable-regex/index.js.map +1 -0
  126. package/src/rules/{security/no-sensitive-data-exposure.js → no-sensitive-data-exposure/index.js} +1 -1
  127. package/src/rules/no-sensitive-data-exposure/index.js.map +1 -0
  128. package/src/rules/no-sensitive-data-in-analytics/index.d.ts +8 -0
  129. package/src/rules/no-sensitive-data-in-analytics/index.js +63 -0
  130. package/src/rules/no-sensitive-data-in-analytics/index.js.map +1 -0
  131. package/src/rules/no-sensitive-data-in-cache/index.d.ts +8 -0
  132. package/src/rules/no-sensitive-data-in-cache/index.js +53 -0
  133. package/src/rules/no-sensitive-data-in-cache/index.js.map +1 -0
  134. package/src/rules/{security/no-sql-injection.js → no-sql-injection/index.js} +5 -1
  135. package/src/rules/no-sql-injection/index.js.map +1 -0
  136. package/src/rules/{security/no-timing-attack.js → no-timing-attack/index.js} +1 -1
  137. package/src/rules/no-timing-attack/index.js.map +1 -0
  138. package/src/rules/{security/no-toctou-vulnerability.js → no-toctou-vulnerability/index.js} +1 -1
  139. package/src/rules/no-toctou-vulnerability/index.js.map +1 -0
  140. package/src/rules/no-tracking-without-consent/index.d.ts +6 -0
  141. package/src/rules/no-tracking-without-consent/index.js +68 -0
  142. package/src/rules/no-tracking-without-consent/index.js.map +1 -0
  143. package/src/rules/{security/no-unchecked-loop-condition.js → no-unchecked-loop-condition/index.js} +25 -13
  144. package/src/rules/no-unchecked-loop-condition/index.js.map +1 -0
  145. package/src/rules/no-unencrypted-local-storage/index.d.ts +8 -0
  146. package/src/rules/no-unencrypted-local-storage/index.js +63 -0
  147. package/src/rules/no-unencrypted-local-storage/index.js.map +1 -0
  148. package/src/rules/{security/no-unencrypted-transmission.js → no-unencrypted-transmission/index.js} +1 -1
  149. package/src/rules/no-unencrypted-transmission/index.js.map +1 -0
  150. package/src/rules/{security/no-unescaped-url-parameter.js → no-unescaped-url-parameter/index.js} +1 -1
  151. package/src/rules/no-unescaped-url-parameter/index.js.map +1 -0
  152. package/src/rules/{security/no-unlimited-resource-allocation.js → no-unlimited-resource-allocation/index.js} +29 -62
  153. package/src/rules/no-unlimited-resource-allocation/index.js.map +1 -0
  154. package/src/rules/{security/no-unsafe-deserialization.js → no-unsafe-deserialization/index.js} +3 -2
  155. package/src/rules/no-unsafe-deserialization/index.js.map +1 -0
  156. package/src/rules/{security/no-unsafe-dynamic-require.js → no-unsafe-dynamic-require/index.js} +1 -1
  157. package/src/rules/no-unsafe-dynamic-require/index.js.map +1 -0
  158. package/src/rules/{security/no-unsafe-regex-construction.js → no-unsafe-regex-construction/index.js} +1 -1
  159. package/src/rules/no-unsafe-regex-construction/index.js.map +1 -0
  160. package/src/rules/{security/no-unsanitized-html.js → no-unsanitized-html/index.js} +1 -45
  161. package/src/rules/no-unsanitized-html/index.js.map +1 -0
  162. package/src/rules/no-unvalidated-deeplinks/index.d.ts +6 -0
  163. package/src/rules/no-unvalidated-deeplinks/index.js +63 -0
  164. package/src/rules/no-unvalidated-deeplinks/index.js.map +1 -0
  165. package/src/rules/{security/no-unvalidated-user-input.js → no-unvalidated-user-input/index.js} +1 -1
  166. package/src/rules/no-unvalidated-user-input/index.js.map +1 -0
  167. package/src/rules/no-verbose-error-messages/index.d.ts +8 -0
  168. package/src/rules/no-verbose-error-messages/index.js +68 -0
  169. package/src/rules/no-verbose-error-messages/index.js.map +1 -0
  170. package/src/rules/{security/no-weak-crypto.js → no-weak-crypto/index.js} +1 -1
  171. package/src/rules/no-weak-crypto/index.js.map +1 -0
  172. package/src/rules/{security/no-weak-password-recovery.js → no-weak-password-recovery/index.js} +21 -8
  173. package/src/rules/no-weak-password-recovery/index.js.map +1 -0
  174. package/src/rules/{security/no-xpath-injection.js → no-xpath-injection/index.js} +3 -2
  175. package/src/rules/no-xpath-injection/index.js.map +1 -0
  176. package/src/rules/{security/no-xxe-injection.js → no-xxe-injection/index.js} +2 -5
  177. package/src/rules/no-xxe-injection/index.js.map +1 -0
  178. package/src/rules/{security/no-zip-slip.js → no-zip-slip/index.js} +1 -1
  179. package/src/rules/no-zip-slip/index.js.map +1 -0
  180. package/src/rules/require-backend-authorization/index.d.ts +6 -0
  181. package/src/rules/require-backend-authorization/index.js +61 -0
  182. package/src/rules/require-backend-authorization/index.js.map +1 -0
  183. package/src/rules/require-code-minification/index.d.ts +8 -0
  184. package/src/rules/require-code-minification/index.js +48 -0
  185. package/src/rules/require-code-minification/index.js.map +1 -0
  186. package/src/rules/require-csp-headers/index.d.ts +6 -0
  187. package/src/rules/require-csp-headers/index.js +65 -0
  188. package/src/rules/require-csp-headers/index.js.map +1 -0
  189. package/src/rules/require-data-minimization/index.d.ts +8 -0
  190. package/src/rules/require-data-minimization/index.js +54 -0
  191. package/src/rules/require-data-minimization/index.js.map +1 -0
  192. package/src/rules/require-dependency-integrity/index.d.ts +6 -0
  193. package/src/rules/require-dependency-integrity/index.js +65 -0
  194. package/src/rules/require-dependency-integrity/index.js.map +1 -0
  195. package/src/rules/require-https-only/index.d.ts +8 -0
  196. package/src/rules/require-https-only/index.js +64 -0
  197. package/src/rules/require-https-only/index.js.map +1 -0
  198. package/src/rules/require-mime-type-validation/index.d.ts +6 -0
  199. package/src/rules/require-mime-type-validation/index.js +67 -0
  200. package/src/rules/require-mime-type-validation/index.js.map +1 -0
  201. package/src/rules/require-network-timeout/index.d.ts +8 -0
  202. package/src/rules/require-network-timeout/index.js +51 -0
  203. package/src/rules/require-network-timeout/index.js.map +1 -0
  204. package/src/rules/require-package-lock/index.d.ts +8 -0
  205. package/src/rules/require-package-lock/index.js +64 -0
  206. package/src/rules/require-package-lock/index.js.map +1 -0
  207. package/src/rules/require-secure-credential-storage/index.d.ts +8 -0
  208. package/src/rules/require-secure-credential-storage/index.js +51 -0
  209. package/src/rules/require-secure-credential-storage/index.js.map +1 -0
  210. package/src/rules/require-secure-defaults/index.d.ts +8 -0
  211. package/src/rules/require-secure-defaults/index.js +48 -0
  212. package/src/rules/require-secure-defaults/index.js.map +1 -0
  213. package/src/rules/require-secure-deletion/index.d.ts +8 -0
  214. package/src/rules/require-secure-deletion/index.js +45 -0
  215. package/src/rules/require-secure-deletion/index.js.map +1 -0
  216. package/src/rules/require-storage-encryption/index.d.ts +8 -0
  217. package/src/rules/require-storage-encryption/index.js +51 -0
  218. package/src/rules/require-storage-encryption/index.js.map +1 -0
  219. package/src/rules/require-url-validation/index.d.ts +6 -0
  220. package/src/rules/require-url-validation/index.js +73 -0
  221. package/src/rules/require-url-validation/index.js.map +1 -0
  222. package/src/types/index.d.ts +48 -48
  223. package/src/rules/security/database-injection.js.map +0 -1
  224. package/src/rules/security/detect-child-process.js.map +0 -1
  225. package/src/rules/security/detect-eval-with-expression.js.map +0 -1
  226. package/src/rules/security/detect-non-literal-fs-filename.js.map +0 -1
  227. package/src/rules/security/detect-non-literal-regexp.js.map +0 -1
  228. package/src/rules/security/detect-object-injection.js.map +0 -1
  229. package/src/rules/security/no-buffer-overread.js.map +0 -1
  230. package/src/rules/security/no-clickjacking.js.map +0 -1
  231. package/src/rules/security/no-directive-injection.js.map +0 -1
  232. package/src/rules/security/no-document-cookie.js.map +0 -1
  233. package/src/rules/security/no-electron-security-issues.js.map +0 -1
  234. package/src/rules/security/no-exposed-sensitive-data.js.map +0 -1
  235. package/src/rules/security/no-format-string-injection.js.map +0 -1
  236. package/src/rules/security/no-graphql-injection.js.map +0 -1
  237. package/src/rules/security/no-hardcoded-credentials.js.map +0 -1
  238. package/src/rules/security/no-improper-sanitization.js.map +0 -1
  239. package/src/rules/security/no-improper-type-validation.js.map +0 -1
  240. package/src/rules/security/no-insecure-comparison.js.map +0 -1
  241. package/src/rules/security/no-insecure-cookie-settings.js.map +0 -1
  242. package/src/rules/security/no-insecure-jwt.js.map +0 -1
  243. package/src/rules/security/no-insecure-redirects.js.map +0 -1
  244. package/src/rules/security/no-insufficient-postmessage-validation.js.map +0 -1
  245. package/src/rules/security/no-insufficient-random.js.map +0 -1
  246. package/src/rules/security/no-ldap-injection.js.map +0 -1
  247. package/src/rules/security/no-missing-authentication.js.map +0 -1
  248. package/src/rules/security/no-missing-cors-check.js.map +0 -1
  249. package/src/rules/security/no-missing-csrf-protection.js.map +0 -1
  250. package/src/rules/security/no-missing-security-headers.js.map +0 -1
  251. package/src/rules/security/no-privilege-escalation.js.map +0 -1
  252. package/src/rules/security/no-redos-vulnerable-regex.js.map +0 -1
  253. package/src/rules/security/no-sensitive-data-exposure.js.map +0 -1
  254. package/src/rules/security/no-sql-injection.js.map +0 -1
  255. package/src/rules/security/no-timing-attack.js.map +0 -1
  256. package/src/rules/security/no-toctou-vulnerability.js.map +0 -1
  257. package/src/rules/security/no-unchecked-loop-condition.js.map +0 -1
  258. package/src/rules/security/no-unencrypted-transmission.js.map +0 -1
  259. package/src/rules/security/no-unescaped-url-parameter.js.map +0 -1
  260. package/src/rules/security/no-unlimited-resource-allocation.js.map +0 -1
  261. package/src/rules/security/no-unsafe-deserialization.js.map +0 -1
  262. package/src/rules/security/no-unsafe-dynamic-require.js.map +0 -1
  263. package/src/rules/security/no-unsafe-regex-construction.js.map +0 -1
  264. package/src/rules/security/no-unsanitized-html.js.map +0 -1
  265. package/src/rules/security/no-unvalidated-user-input.js.map +0 -1
  266. package/src/rules/security/no-weak-crypto.js.map +0 -1
  267. package/src/rules/security/no-weak-password-recovery.js.map +0 -1
  268. package/src/rules/security/no-xpath-injection.js.map +0 -1
  269. package/src/rules/security/no-xxe-injection.js.map +0 -1
  270. package/src/rules/security/no-zip-slip.js.map +0 -1
  271. /package/src/rules/{security/database-injection.d.ts → database-injection/index.d.ts} +0 -0
  272. /package/src/rules/{security/detect-child-process.d.ts → detect-child-process/index.d.ts} +0 -0
  273. /package/src/rules/{security/detect-eval-with-expression.d.ts → detect-eval-with-expression/index.d.ts} +0 -0
  274. /package/src/rules/{security/detect-non-literal-fs-filename.d.ts → detect-non-literal-fs-filename/index.d.ts} +0 -0
  275. /package/src/rules/{security/detect-non-literal-regexp.d.ts → detect-non-literal-regexp/index.d.ts} +0 -0
  276. /package/src/rules/{security/detect-object-injection.d.ts → detect-object-injection/index.d.ts} +0 -0
  277. /package/src/rules/{security/no-buffer-overread.d.ts → no-buffer-overread/index.d.ts} +0 -0
  278. /package/src/rules/{security/no-clickjacking.d.ts → no-clickjacking/index.d.ts} +0 -0
  279. /package/src/rules/{security/no-directive-injection.d.ts → no-directive-injection/index.d.ts} +0 -0
  280. /package/src/rules/{security/no-document-cookie.d.ts → no-document-cookie/index.d.ts} +0 -0
  281. /package/src/rules/{security/no-electron-security-issues.d.ts → no-electron-security-issues/index.d.ts} +0 -0
  282. /package/src/rules/{security/no-exposed-sensitive-data.d.ts → no-exposed-sensitive-data/index.d.ts} +0 -0
  283. /package/src/rules/{security/no-format-string-injection.d.ts → no-format-string-injection/index.d.ts} +0 -0
  284. /package/src/rules/{security/no-graphql-injection.d.ts → no-graphql-injection/index.d.ts} +0 -0
  285. /package/src/rules/{security/no-hardcoded-credentials.d.ts → no-hardcoded-credentials/index.d.ts} +0 -0
  286. /package/src/rules/{security/no-improper-sanitization.d.ts → no-improper-sanitization/index.d.ts} +0 -0
  287. /package/src/rules/{security/no-improper-type-validation.d.ts → no-improper-type-validation/index.d.ts} +0 -0
  288. /package/src/rules/{security/no-insecure-comparison.d.ts → no-insecure-comparison/index.d.ts} +0 -0
  289. /package/src/rules/{security/no-insecure-cookie-settings.d.ts → no-insecure-cookie-settings/index.d.ts} +0 -0
  290. /package/src/rules/{security/no-insecure-jwt.d.ts → no-insecure-jwt/index.d.ts} +0 -0
  291. /package/src/rules/{security/no-insecure-redirects.d.ts → no-insecure-redirects/index.d.ts} +0 -0
  292. /package/src/rules/{security/no-insufficient-postmessage-validation.d.ts → no-insufficient-postmessage-validation/index.d.ts} +0 -0
  293. /package/src/rules/{security/no-insufficient-random.d.ts → no-insufficient-random/index.d.ts} +0 -0
  294. /package/src/rules/{security/no-ldap-injection.d.ts → no-ldap-injection/index.d.ts} +0 -0
  295. /package/src/rules/{security/no-missing-authentication.d.ts → no-missing-authentication/index.d.ts} +0 -0
  296. /package/src/rules/{security/no-missing-cors-check.d.ts → no-missing-cors-check/index.d.ts} +0 -0
  297. /package/src/rules/{security/no-missing-csrf-protection.d.ts → no-missing-csrf-protection/index.d.ts} +0 -0
  298. /package/src/rules/{security/no-missing-security-headers.d.ts → no-missing-security-headers/index.d.ts} +0 -0
  299. /package/src/rules/{security/no-privilege-escalation.d.ts → no-privilege-escalation/index.d.ts} +0 -0
  300. /package/src/rules/{security/no-redos-vulnerable-regex.d.ts → no-redos-vulnerable-regex/index.d.ts} +0 -0
  301. /package/src/rules/{security/no-sensitive-data-exposure.d.ts → no-sensitive-data-exposure/index.d.ts} +0 -0
  302. /package/src/rules/{security/no-sql-injection.d.ts → no-sql-injection/index.d.ts} +0 -0
  303. /package/src/rules/{security/no-timing-attack.d.ts → no-timing-attack/index.d.ts} +0 -0
  304. /package/src/rules/{security/no-toctou-vulnerability.d.ts → no-toctou-vulnerability/index.d.ts} +0 -0
  305. /package/src/rules/{security/no-unchecked-loop-condition.d.ts → no-unchecked-loop-condition/index.d.ts} +0 -0
  306. /package/src/rules/{security/no-unencrypted-transmission.d.ts → no-unencrypted-transmission/index.d.ts} +0 -0
  307. /package/src/rules/{security/no-unescaped-url-parameter.d.ts → no-unescaped-url-parameter/index.d.ts} +0 -0
  308. /package/src/rules/{security/no-unlimited-resource-allocation.d.ts → no-unlimited-resource-allocation/index.d.ts} +0 -0
  309. /package/src/rules/{security/no-unsafe-deserialization.d.ts → no-unsafe-deserialization/index.d.ts} +0 -0
  310. /package/src/rules/{security/no-unsafe-dynamic-require.d.ts → no-unsafe-dynamic-require/index.d.ts} +0 -0
  311. /package/src/rules/{security/no-unsafe-regex-construction.d.ts → no-unsafe-regex-construction/index.d.ts} +0 -0
  312. /package/src/rules/{security/no-unsanitized-html.d.ts → no-unsanitized-html/index.d.ts} +0 -0
  313. /package/src/rules/{security/no-unvalidated-user-input.d.ts → no-unvalidated-user-input/index.d.ts} +0 -0
  314. /package/src/rules/{security/no-weak-crypto.d.ts → no-weak-crypto/index.d.ts} +0 -0
  315. /package/src/rules/{security/no-weak-password-recovery.d.ts → no-weak-password-recovery/index.d.ts} +0 -0
  316. /package/src/rules/{security/no-xpath-injection.d.ts → no-xpath-injection/index.d.ts} +0 -0
  317. /package/src/rules/{security/no-xxe-injection.d.ts → no-xxe-injection/index.d.ts} +0 -0
  318. /package/src/rules/{security/no-zip-slip.d.ts → no-zip-slip/index.d.ts} +0 -0
@@ -483,10 +483,11 @@ exports.noBufferOverread = (0, eslint_devkit_1.createRule)({
483
483
  if (isUserControlledIndex(indexNode) && !isIndexValidated(indexNode)) {
484
484
  // Check if there's a bounds check in scope
485
485
  if (!hasBoundsCheck(bufferName, indexNode)) {
486
- // FALSE POSITIVE REDUCTION
486
+ /* c8 ignore start -- safetyChecker.isSafe requires JSDoc annotations not testable via RuleTester */
487
487
  if (safetyChecker.isSafe(node, context)) {
488
488
  return;
489
489
  }
490
+ /* c8 ignore stop */
490
491
  context.report({
491
492
  node,
492
493
  messageId: 'userControlledBufferIndex',
@@ -500,10 +501,11 @@ exports.noBufferOverread = (0, eslint_devkit_1.createRule)({
500
501
  }
501
502
  // Check if there's any bounds validation
502
503
  if (!hasBoundsCheck(bufferName, indexNode) && !isIndexValidated(indexNode)) {
503
- // FALSE POSITIVE REDUCTION
504
+ /* c8 ignore start -- safetyChecker.isSafe requires JSDoc annotations not testable via RuleTester */
504
505
  if (safetyChecker.isSafe(node, context)) {
505
506
  return;
506
507
  }
508
+ /* c8 ignore stop */
507
509
  context.report({
508
510
  node,
509
511
  messageId: 'unsafeBufferAccess',
@@ -536,10 +538,11 @@ exports.noBufferOverread = (0, eslint_devkit_1.createRule)({
536
538
  // Check slice arguments
537
539
  for (const arg of args) {
538
540
  if (isUserControlledIndex(arg) && !isIndexValidated(arg)) {
539
- // FALSE POSITIVE REDUCTION
541
+ /* c8 ignore start -- safetyChecker.isSafe requires JSDoc annotations not testable via RuleTester */
540
542
  if (safetyChecker.isSafe(node, context)) {
541
543
  continue;
542
544
  }
545
+ /* c8 ignore stop */
543
546
  context.report({
544
547
  node: arg,
545
548
  messageId: 'unsafeBufferSlice',
@@ -561,10 +564,11 @@ exports.noBufferOverread = (0, eslint_devkit_1.createRule)({
561
564
  // Check offset/length arguments
562
565
  for (const arg of args) {
563
566
  if (isUserControlledIndex(arg) && !isIndexValidated(arg)) {
564
- // FALSE POSITIVE REDUCTION
567
+ /* c8 ignore start -- safetyChecker.isSafe requires JSDoc annotations not testable via RuleTester */
565
568
  if (safetyChecker.isSafe(node, context)) {
566
569
  continue;
567
570
  }
571
+ /* c8 ignore stop */
568
572
  context.report({
569
573
  node: arg,
570
574
  messageId: 'missingBoundsCheck',
@@ -589,4 +593,4 @@ exports.noBufferOverread = (0, eslint_devkit_1.createRule)({
589
593
  };
590
594
  },
591
595
  });
592
- //# sourceMappingURL=no-buffer-overread.js.map
596
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-buffer-overread/index.ts"],"names":[],"mappings":"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"}
@@ -250,10 +250,11 @@ exports.noClickjacking = (0, eslint_devkit_1.createRule)({
250
250
  }
251
251
  }
252
252
  if (hasSrc && srcValue && !isTrustedSource(srcValue)) {
253
- // FALSE POSITIVE REDUCTION
253
+ /* c8 ignore start -- safetyChecker requires JSDoc annotations not testable via RuleTester */
254
254
  if (safetyChecker.isSafe(node, context)) {
255
255
  return;
256
256
  }
257
+ /* c8 ignore stop */
257
258
  context.report({
258
259
  node: node.openingElement,
259
260
  messageId: 'unsafeIframeUsage',
@@ -297,10 +298,11 @@ exports.noClickjacking = (0, eslint_devkit_1.createRule)({
297
298
  current = current.parent;
298
299
  }
299
300
  if (isFrameManipulation) {
300
- // FALSE POSITIVE REDUCTION
301
+ /* c8 ignore start -- safetyChecker requires JSDoc annotations not testable via RuleTester */
301
302
  if (safetyChecker.isSafe(node, context)) {
302
303
  return;
303
304
  }
305
+ /* c8 ignore stop */
304
306
  context.report({
305
307
  node,
306
308
  messageId: 'frameManipulation',
@@ -320,10 +322,11 @@ exports.noClickjacking = (0, eslint_devkit_1.createRule)({
320
322
  const text = node.value.toLowerCase();
321
323
  if ((text.includes('style=') || text.includes('css')) &&
322
324
  hasTransparentStyles(text)) {
323
- // FALSE POSITIVE REDUCTION
325
+ /* c8 ignore start -- safetyChecker requires JSDoc annotations not testable via RuleTester */
324
326
  if (safetyChecker.isSafe(node, context)) {
325
327
  return;
326
328
  }
329
+ /* c8 ignore stop */
327
330
  context.report({
328
331
  node,
329
332
  messageId: 'transparentFrameOverlay',
@@ -340,10 +343,11 @@ exports.noClickjacking = (0, eslint_devkit_1.createRule)({
340
343
  if (detectTransparentOverlays) {
341
344
  const text = sourceCode.getText(node).toLowerCase();
342
345
  if (text.includes('style') && hasTransparentStyles(text)) {
343
- // FALSE POSITIVE REDUCTION
346
+ /* c8 ignore start -- safetyChecker requires JSDoc annotations not testable via RuleTester */
344
347
  if (safetyChecker.isSafe(node, context)) {
345
348
  return;
346
349
  }
350
+ /* c8 ignore stop */
347
351
  context.report({
348
352
  node,
349
353
  messageId: 'transparentFrameOverlay',
@@ -358,11 +362,21 @@ exports.noClickjacking = (0, eslint_devkit_1.createRule)({
358
362
  // At the end of the file, check if frame-busting is required but missing
359
363
  'Program:exit'() {
360
364
  if (requireFrameBusting && !hasFrameBusting) {
361
- // Check if this file likely needs frame protection (has UI elements)
365
+ // Only check files that are likely entry points or render HTML
366
+ const isEntryPoint = /\.(html|htm)$/.test(filename) ||
367
+ /(index|app|main|page)\.(tsx|jsx)$/i.test(filename) ||
368
+ /pages?\/.*\.(tsx|jsx)$/i.test(filename) ||
369
+ /layout\.(tsx|jsx)$/i.test(filename);
370
+ // Skip non-entry point files
371
+ if (!isEntryPoint) {
372
+ return;
373
+ }
374
+ // Check if this file has actual UI rendering (JSX elements with event handlers)
362
375
  const fileContent = sourceCode.getText();
363
- const hasUIElements = /\b(button|input|form|a|div)\b/i.test(fileContent) ||
364
- fileContent.includes('onClick') ||
365
- fileContent.includes('onSubmit');
376
+ const hasUIElements = fileContent.includes('<button') ||
377
+ fileContent.includes('<form') ||
378
+ fileContent.includes('<input') ||
379
+ (fileContent.includes('onClick') && fileContent.includes('<'));
366
380
  if (hasUIElements) {
367
381
  context.report({
368
382
  node: context.sourceCode.ast,
@@ -378,4 +392,4 @@ exports.noClickjacking = (0, eslint_devkit_1.createRule)({
378
392
  };
379
393
  },
380
394
  });
381
- //# sourceMappingURL=no-clickjacking.js.map
395
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-clickjacking/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Prevent authentication logic in client code
3
+ */
4
+ export interface Options {
5
+ }
6
+ export declare const noClientSideAuthLogic: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Prevent authentication logic in client code
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.noClientSideAuthLogic = void 0;
7
+ const eslint_devkit_1 = require("@interlace/eslint-devkit");
8
+ exports.noClientSideAuthLogic = (0, eslint_devkit_1.createRule)({
9
+ name: 'no-client-side-auth-logic',
10
+ meta: {
11
+ type: 'problem',
12
+ docs: {
13
+ description: 'Prevent authentication logic in client code',
14
+ },
15
+ messages: {
16
+ violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
17
+ icon: eslint_devkit_1.MessageIcons.SECURITY,
18
+ issueName: 'Client-Side Auth Logic',
19
+ cwe: 'CWE-602',
20
+ description: 'Authentication logic in client code - easily bypassed',
21
+ severity: 'CRITICAL',
22
+ fix: 'Move authentication checks to the server',
23
+ documentationLink: 'https://cwe.mitre.org/data/definitions/602.html',
24
+ })
25
+ },
26
+ schema: [],
27
+ },
28
+ defaultOptions: [],
29
+ create(context) {
30
+ function report(node) {
31
+ context.report({ node, messageId: 'violationDetected' });
32
+ }
33
+ const authKeywords = ['admin', 'authenticated', 'authorized', 'isAdmin', 'isAuthenticated', 'role'];
34
+ return {
35
+ IfStatement(node) {
36
+ // Detect role/auth checks from localStorage
37
+ if (node.test.type === 'CallExpression' &&
38
+ node.test.callee.type === 'MemberExpression' &&
39
+ node.test.callee.object.type === 'Identifier' &&
40
+ node.test.callee.object.name === 'localStorage' &&
41
+ node.test.callee.property.type === 'Identifier' &&
42
+ node.test.callee.property.name === 'getItem') {
43
+ const keyArg = node.test.arguments[0];
44
+ if (keyArg && keyArg.type === 'Literal') {
45
+ const key = String(keyArg.value).toLowerCase();
46
+ if (authKeywords.some(kw => key.includes(kw))) {
47
+ report(node);
48
+ }
49
+ }
50
+ }
51
+ // Detect password comparison
52
+ if (node.test.type === 'BinaryExpression') {
53
+ const checkMember = (expr) => {
54
+ if (expr.type === 'MemberExpression' &&
55
+ expr.property.type === 'Identifier' &&
56
+ ['password', 'secret', 'token'].includes(expr.property.name)) {
57
+ return true;
58
+ }
59
+ return false;
60
+ };
61
+ if (checkMember(node.test.left) ||
62
+ checkMember(node.test.right)) {
63
+ report(node);
64
+ }
65
+ }
66
+ },
67
+ };
68
+ },
69
+ });
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-client-side-auth-logic/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Disallow credentials in URL query parameters
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 noCredentialsInQueryParams: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Disallow credentials in URL query parameters
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.noCredentialsInQueryParams = void 0;
9
+ const eslint_devkit_1 = require("@interlace/eslint-devkit");
10
+ exports.noCredentialsInQueryParams = (0, eslint_devkit_1.createRule)({
11
+ name: 'no-credentials-in-query-params',
12
+ meta: {
13
+ type: 'problem',
14
+ docs: {
15
+ description: 'Disallow credentials in URL query parameters',
16
+ },
17
+ messages: {
18
+ violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
19
+ icon: eslint_devkit_1.MessageIcons.SECURITY,
20
+ issueName: 'Credentials in Query Parameters',
21
+ cwe: 'CWE-798',
22
+ description: 'Credentials detected in URL query parameters - this is a security risk',
23
+ severity: 'CRITICAL',
24
+ fix: 'Use secure methods: POST body, headers (Authorization), or secure cookies',
25
+ documentationLink: 'https://cwe.mitre.org/data/definitions/798.html',
26
+ })
27
+ },
28
+ schema: [],
29
+ },
30
+ defaultOptions: [],
31
+ create(context) {
32
+ const sourceCode = context.sourceCode;
33
+ const sensitiveParams = ['password=', 'token=', 'apikey=', 'secret=', 'auth='];
34
+ function report(node) {
35
+ context.report({
36
+ node,
37
+ messageId: 'violationDetected',
38
+ });
39
+ }
40
+ return {
41
+ Literal(node) {
42
+ if (typeof node.value === 'string') {
43
+ const url = node.value.toLowerCase();
44
+ if (sensitiveParams.some(param => url.includes('?' + param) || url.includes('&' + param))) {
45
+ report(node);
46
+ }
47
+ }
48
+ },
49
+ TemplateLiteral(node) {
50
+ const text = sourceCode.getText(node).toLowerCase();
51
+ if (sensitiveParams.some(param => text.includes(param))) {
52
+ report(node);
53
+ }
54
+ },
55
+ };
56
+ },
57
+ });
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-credentials-in-query-params/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,4DAAsF;AAUzE,QAAA,0BAA0B,GAAG,IAAA,0BAAU,EAA0B;IAC5E,IAAI,EAAE,gCAAgC;IACtC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,8CAA8C;SAC5D;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE,IAAA,gCAAgB,EAAC;gBAClC,IAAI,EAAE,4BAAY,CAAC,QAAQ;gBAC3B,SAAS,EAAE,iCAAiC;gBAC5C,GAAG,EAAE,SAAS;gBACd,WAAW,EAAE,wEAAwE;gBACrF,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,2EAA2E;gBAChF,iBAAiB,EAAE,iDAAiD;aACrE,CAAC;SACH;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/E,SAAS,MAAM,CAAC,IAAmB;YACjC,OAAO,CAAC,MAAM,CAAC;gBACb,IAAI;gBACJ,SAAS,EAAE,mBAAmB;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,CAAC,IAAsB;gBAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAErC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC1F,MAAM,CAAC,IAAI,CAAC,CAAC;oBACf,CAAC;gBACH,CAAC;YACH,CAAC;YAED,eAAe,CAAC,IAA8B;gBAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAEpD,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACxD,MAAM,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Disallow storing credentials in browser/mobile storage APIs
3
+ */
4
+ export interface Options {
5
+ }
6
+ export declare const noCredentialsInStorageApi: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Disallow storing credentials in browser/mobile storage APIs
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.noCredentialsInStorageApi = void 0;
7
+ const eslint_devkit_1 = require("@interlace/eslint-devkit");
8
+ exports.noCredentialsInStorageApi = (0, eslint_devkit_1.createRule)({
9
+ name: 'no-credentials-in-storage-api',
10
+ meta: {
11
+ type: 'problem',
12
+ docs: {
13
+ description: 'Disallow storing credentials in browser/mobile storage APIs',
14
+ },
15
+ messages: {
16
+ violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
17
+ icon: eslint_devkit_1.MessageIcons.SECURITY,
18
+ issueName: 'Credentials in Storage',
19
+ cwe: 'CWE-522',
20
+ description: 'Credentials stored in insecure browser/mobile storage',
21
+ severity: 'CRITICAL',
22
+ fix: 'Use secure storage like Keychain, SecureStore, or encrypted storage',
23
+ documentationLink: 'https://cwe.mitre.org/data/definitions/522.html',
24
+ })
25
+ },
26
+ schema: [],
27
+ },
28
+ defaultOptions: [],
29
+ create(context) {
30
+ function report(node) {
31
+ context.report({ node, messageId: 'violationDetected' });
32
+ }
33
+ const sensitiveKeys = ['password', 'token', 'apikey', 'secret', 'credential', 'auth', 'key'];
34
+ const storageObjects = ['localStorage', 'sessionStorage', 'AsyncStorage'];
35
+ return {
36
+ CallExpression(node) {
37
+ // Check localStorage.setItem/sessionStorage.setItem/AsyncStorage.setItem
38
+ if (node.callee.type === 'MemberExpression' &&
39
+ node.callee.object.type === 'Identifier' &&
40
+ storageObjects.includes(node.callee.object.name) &&
41
+ node.callee.property.type === 'Identifier' &&
42
+ node.callee.property.name === 'setItem') {
43
+ const keyArg = node.arguments[0];
44
+ if (keyArg && keyArg.type === 'Literal' && typeof keyArg.value === 'string') {
45
+ const key = keyArg.value.toLowerCase();
46
+ if (sensitiveKeys.some(k => key.includes(k))) {
47
+ report(node);
48
+ }
49
+ }
50
+ }
51
+ },
52
+ };
53
+ },
54
+ });
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-credentials-in-storage-api/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,4DAAsF;AAUzE,QAAA,yBAAyB,GAAG,IAAA,0BAAU,EAA0B;IAC3E,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,6DAA6D;SAC3E;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE,IAAA,gCAAgB,EAAC;gBAClC,IAAI,EAAE,4BAAY,CAAC,QAAQ;gBAC3B,SAAS,EAAE,wBAAwB;gBACnC,GAAG,EAAE,SAAS;gBACd,WAAW,EAAE,uDAAuD;gBACpE,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,qEAAqE;gBAC1E,iBAAiB,EAAE,iDAAiD;aACrE,CAAC;SACH;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,SAAS,MAAM,CAAC,IAAmB;YACjC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7F,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAE1E,OAAO;YACL,cAAc,CAAC,IAA6B;gBAC1C,yEAAyE;gBACzE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB;oBACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;oBACxC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;wBACvC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC7C,MAAM,CAAC,IAAI,CAAC,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Prevent sensitive data in temp directories
3
+ */
4
+ export interface Options {
5
+ }
6
+ export declare const noDataInTempStorage: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Prevent sensitive data in temp directories
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.noDataInTempStorage = void 0;
7
+ const eslint_devkit_1 = require("@interlace/eslint-devkit");
8
+ exports.noDataInTempStorage = (0, eslint_devkit_1.createRule)({
9
+ name: 'no-data-in-temp-storage',
10
+ meta: {
11
+ type: 'problem',
12
+ docs: {
13
+ description: 'Prevent sensitive data in temp directories',
14
+ },
15
+ messages: {
16
+ violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
17
+ icon: eslint_devkit_1.MessageIcons.SECURITY,
18
+ issueName: 'Temp Storage Data',
19
+ cwe: 'CWE-312',
20
+ description: 'Sensitive data written to temp directory - not secure',
21
+ severity: 'HIGH',
22
+ fix: 'Use secure storage location or encrypt data before writing',
23
+ documentationLink: 'https://cwe.mitre.org/data/definitions/312.html',
24
+ })
25
+ },
26
+ schema: [],
27
+ },
28
+ defaultOptions: [],
29
+ create(context) {
30
+ function report(node) {
31
+ context.report({ node, messageId: 'violationDetected' });
32
+ }
33
+ const tempPaths = ['/tmp', '/var/tmp', 'temp/', '/temp'];
34
+ return {
35
+ CallExpression(node) {
36
+ // Detect fs.writeFileSync or fs.writeFile with temp path
37
+ if (node.callee.type === 'MemberExpression' &&
38
+ node.callee.object.type === 'Identifier' &&
39
+ node.callee.object.name === 'fs' &&
40
+ node.callee.property.type === 'Identifier' &&
41
+ ['writeFileSync', 'writeFile'].includes(node.callee.property.name)) {
42
+ const pathArg = node.arguments[0];
43
+ if (pathArg && pathArg.type === 'Literal' && typeof pathArg.value === 'string') {
44
+ if (tempPaths.some(tp => pathArg.value.includes(tp))) {
45
+ report(node);
46
+ }
47
+ }
48
+ }
49
+ },
50
+ Literal(node) {
51
+ // Detect temp path literals
52
+ if (typeof node.value === 'string') {
53
+ if (tempPaths.some(tp => node.value.includes(tp))) {
54
+ // Only flag if parent is assignment or variable declaration
55
+ const parent = node.parent;
56
+ if (parent?.type === 'VariableDeclarator' || parent?.type === 'AssignmentExpression') {
57
+ report(node);
58
+ }
59
+ }
60
+ }
61
+ },
62
+ };
63
+ },
64
+ });
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-data-in-temp-storage/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,4DAAsF;AAUzE,QAAA,mBAAmB,GAAG,IAAA,0BAAU,EAA0B;IACrE,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,4CAA4C;SAC1D;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE,IAAA,gCAAgB,EAAC;gBAClC,IAAI,EAAE,4BAAY,CAAC,QAAQ;gBAC3B,SAAS,EAAE,mBAAmB;gBAC9B,GAAG,EAAE,SAAS;gBACd,WAAW,EAAE,uDAAuD;gBACpE,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,4DAA4D;gBACjE,iBAAiB,EAAE,iDAAiD;aACrE,CAAC;SACH;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,SAAS,MAAM,CAAC,IAAmB;YACjC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEzD,OAAO;YACL,cAAc,CAAC,IAA6B;gBAC1C,yDAAyD;gBACzD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB;oBACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;oBACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI;oBAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAC1C,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC/E,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;4BACrD,MAAM,CAAC,IAAI,CAAC,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAsB;gBAC5B,4BAA4B;gBAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACnC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBAClD,4DAA4D;wBAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC3B,IAAI,MAAM,EAAE,IAAI,KAAK,oBAAoB,IAAI,MAAM,EAAE,IAAI,KAAK,sBAAsB,EAAE,CAAC;4BACrF,MAAM,CAAC,IAAI,CAAC,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Detect debug code in production
3
+ * @see https://owasp.org/www-project-mobile-top-10/
4
+ * @see https://cwe.mitre.org/data/definitions/489.html
5
+ */
6
+ export interface Options {
7
+ }
8
+ export declare const noDebugCodeInProduction: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Detect debug code in production
4
+ * @see https://owasp.org/www-project-mobile-top-10/
5
+ * @see https://cwe.mitre.org/data/definitions/489.html
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.noDebugCodeInProduction = void 0;
9
+ const eslint_devkit_1 = require("@interlace/eslint-devkit");
10
+ exports.noDebugCodeInProduction = (0, eslint_devkit_1.createRule)({
11
+ name: 'no-debug-code-in-production',
12
+ meta: {
13
+ type: 'problem',
14
+ docs: {
15
+ description: 'Detect debug code in production',
16
+ category: 'Security',
17
+ recommended: true,
18
+ owaspMobile: ['M7'],
19
+ cweIds: ["CWE-489"],
20
+ },
21
+ messages: {
22
+ violationDetected: (0, eslint_devkit_1.formatLLMMessage)({
23
+ icon: eslint_devkit_1.MessageIcons.SECURITY,
24
+ issueName: 'violation Detected',
25
+ cwe: 'CWE-489',
26
+ description: 'Detect debug code in production detected - DEBUG, __DEV__, console',
27
+ severity: 'HIGH',
28
+ fix: 'Review and apply secure practices',
29
+ documentationLink: 'https://cwe.mitre.org/data/definitions/489.html',
30
+ })
31
+ },
32
+ schema: [],
33
+ },
34
+ defaultOptions: [],
35
+ create(context) {
36
+ return {
37
+ Identifier(node) {
38
+ if (['DEBUG', '__DEV__'].includes(node.name)) {
39
+ context.report({ node, messageId: 'violationDetected' });
40
+ }
41
+ },
42
+ CallExpression(node) {
43
+ if (node.callee.type === 'MemberExpression' &&
44
+ node.callee.object.name === 'console' &&
45
+ node.callee.property.name === 'log') {
46
+ context.report({ node, messageId: 'violationDetected' });
47
+ }
48
+ },
49
+ };
50
+ },
51
+ });
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-secure-coding/src/rules/no-debug-code-in-production/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,4DAAsF;AAUzE,QAAA,uBAAuB,GAAG,IAAA,0BAAU,EAA0B;IACzE,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,CAAC,IAAI,CAAC;YACnB,MAAM,EAAE,CAAC,SAAS,CAAC;SACpB;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE,IAAA,gCAAgB,EAAC;gBAClC,IAAI,EAAE,4BAAY,CAAC,QAAQ;gBAC3B,SAAS,EAAE,oBAAoB;gBAC/B,GAAG,EAAE,SAAS;gBACd,WAAW,EAAE,oEAAoE;gBACjF,QAAQ,EAAE,MAAM;gBAChB,GAAG,EAAE,mCAAmC;gBACxC,iBAAiB,EAAE,iDAAiD;aACrE,CAAC;SACH;QACD,MAAM,EAAE,EAAE;KACX;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACZ,OAAO;YAEL,UAAU,CAAC,IAAyB;gBAClC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YACD,cAAc,CAAC,IAA6B;gBAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB;oBACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;oBACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACxC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}