@sun-asterisk/sunlint 1.3.39 → 1.3.40

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 (422) hide show
  1. package/config/rules/rules-registry-generated.json +134 -108
  2. package/docs/GENERATED_FILES_QUICK_REFERENCE.md +96 -0
  3. package/docs/GENERATED_FILE_HANDLING_SUMMARY.md +152 -0
  4. package/docs/skills/CREATE_NEW_DART_RULE.md +161 -14
  5. package/origin-rules/dart-en.md +151 -163
  6. package/package.json +2 -1
  7. package/rules/dart/D002_dispose_resources/config.json +25 -0
  8. package/rules/dart/D003_prefer_widgets_over_methods/config.json +14 -0
  9. package/rules/dart/D004_avoid_shrinkwrap_listview/config.json +13 -0
  10. package/rules/dart/D005_limit_widget_nesting/config.json +13 -0
  11. package/rules/dart/D006_prefer_extracting_large_callbacks/config.json +25 -0
  12. package/rules/dart/D007_prefer_init_first_dispose_last/config.json +10 -0
  13. package/rules/dart/D008_avoid_long_functions/config.json +12 -0
  14. package/rules/dart/D009_limit_function_parameters/config.json +13 -0
  15. package/rules/dart/D010_limit_cyclomatic_complexity/config.json +12 -0
  16. package/rules/dart/D011_prefer_named_parameters/config.json +12 -0
  17. package/rules/dart/D012_prefer_named_boolean_parameters/config.json +9 -0
  18. package/rules/dart/D013_single_public_class/config.json +10 -0
  19. package/rules/dart/D014_unsafe_collection_access/config.json +10 -0
  20. package/rules/dart/D015_copywith_all_parameters/config.json +9 -0
  21. package/rules/dart/D016_project_should_have_tests/config.json +24 -0
  22. package/rules/dart/D017_pubspec_dependencies_review/config.json +23 -0
  23. package/rules/dart/D018_remove_commented_code/config.json +13 -0
  24. package/rules/dart/D019_avoid_single_child_multi_child_widget/config.json +21 -0
  25. package/rules/dart/D020_limit_if_else_branches/config.json +12 -0
  26. package/rules/dart/D021_avoid_negated_boolean_checks/config.json +14 -0
  27. package/rules/dart/D022_use_setstate_correctly/config.json +14 -0
  28. package/rules/dart/D023_avoid_unnecessary_method_overrides/config.json +13 -0
  29. package/rules/dart/D024_avoid_unnecessary_stateful_widget/config.json +9 -0
  30. package/rules/dart/D025_avoid_nested_conditional_expressions/config.json +9 -0
  31. package/skill-assets/sunlint-code-quality/AGENTS.md +80 -0
  32. package/skill-assets/sunlint-code-quality/SKILL.md +176 -0
  33. package/skill-assets/sunlint-code-quality/rules/csharp/C006-verb-noun-functions.md +36 -0
  34. package/skill-assets/sunlint-code-quality/rules/csharp/C013-no-dead-code.md +38 -0
  35. package/skill-assets/sunlint-code-quality/rules/csharp/C014-dependency-injection.md +45 -0
  36. package/skill-assets/sunlint-code-quality/rules/csharp/C017-no-constructor-logic.md +46 -0
  37. package/skill-assets/sunlint-code-quality/rules/csharp/C018-generic-errors.md +38 -0
  38. package/skill-assets/sunlint-code-quality/rules/csharp/C019-error-log-level.md +29 -0
  39. package/skill-assets/sunlint-code-quality/rules/csharp/C020-no-unused-imports.md +30 -0
  40. package/skill-assets/sunlint-code-quality/rules/csharp/C022-no-unused-variables.md +33 -0
  41. package/skill-assets/sunlint-code-quality/rules/csharp/C023-no-duplicate-names.md +36 -0
  42. package/skill-assets/sunlint-code-quality/rules/csharp/C024-centralize-constants.md +33 -0
  43. package/skill-assets/sunlint-code-quality/rules/csharp/C029-catch-log-root-cause.md +40 -0
  44. package/skill-assets/sunlint-code-quality/rules/csharp/C030-custom-error-classes.md +38 -0
  45. package/skill-assets/sunlint-code-quality/rules/csharp/C033-separate-data-access.md +53 -0
  46. package/skill-assets/sunlint-code-quality/rules/csharp/C035-error-context-logging.md +31 -0
  47. package/skill-assets/sunlint-code-quality/rules/csharp/C041-no-hardcoded-secrets.md +25 -0
  48. package/skill-assets/sunlint-code-quality/rules/csharp/C042-boolean-naming.md +27 -0
  49. package/skill-assets/sunlint-code-quality/rules/csharp/C052-controller-parsing.md +41 -0
  50. package/skill-assets/sunlint-code-quality/rules/csharp/C060-superclass-logic.md +33 -0
  51. package/skill-assets/sunlint-code-quality/rules/csharp/C067-no-hardcoded-config.md +24 -0
  52. package/skill-assets/sunlint-code-quality/rules/csharp/S003-open-redirect.md +47 -0
  53. package/skill-assets/sunlint-code-quality/rules/csharp/S004-no-log-credentials.md +28 -0
  54. package/skill-assets/sunlint-code-quality/rules/csharp/S005-server-authorization.md +51 -0
  55. package/skill-assets/sunlint-code-quality/rules/csharp/S006-default-credentials.md +42 -0
  56. package/skill-assets/sunlint-code-quality/rules/csharp/S007-output-encoding.md +36 -0
  57. package/skill-assets/sunlint-code-quality/rules/csharp/S009-approved-crypto.md +37 -0
  58. package/skill-assets/sunlint-code-quality/rules/csharp/S010-csprng.md +32 -0
  59. package/skill-assets/sunlint-code-quality/rules/csharp/S011-encrypted-client-hello.md +36 -0
  60. package/skill-assets/sunlint-code-quality/rules/csharp/S012-secrets-management.md +35 -0
  61. package/skill-assets/sunlint-code-quality/rules/csharp/S013-tls-connections.md +36 -0
  62. package/skill-assets/sunlint-code-quality/rules/csharp/S016-no-sensitive-query-string.md +39 -0
  63. package/skill-assets/sunlint-code-quality/rules/csharp/S017-parameterized-queries.md +47 -0
  64. package/skill-assets/sunlint-code-quality/rules/csharp/S019-email-input-sanitization.md +35 -0
  65. package/skill-assets/sunlint-code-quality/rules/csharp/S020-eval-code-execution.md +56 -0
  66. package/skill-assets/sunlint-code-quality/rules/csharp/S022-context-escaping.md +50 -0
  67. package/skill-assets/sunlint-code-quality/rules/csharp/S023-dynamic-js-encoding.md +34 -0
  68. package/skill-assets/sunlint-code-quality/rules/csharp/S025-server-validation.md +56 -0
  69. package/skill-assets/sunlint-code-quality/rules/csharp/S026-tls-encryption.md +28 -0
  70. package/skill-assets/sunlint-code-quality/rules/csharp/S027-mtls-validation.md +40 -0
  71. package/skill-assets/sunlint-code-quality/rules/csharp/S028-upload-limits.md +50 -0
  72. package/skill-assets/sunlint-code-quality/rules/csharp/S029-csrf-protection.md +42 -0
  73. package/skill-assets/sunlint-code-quality/rules/csharp/S030-directory-browsing.md +26 -0
  74. package/skill-assets/sunlint-code-quality/rules/csharp/S031-secure-cookie-flag.md +35 -0
  75. package/skill-assets/sunlint-code-quality/rules/csharp/S032-httponly-cookie.md +31 -0
  76. package/skill-assets/sunlint-code-quality/rules/csharp/S033-samesite-cookie.md +36 -0
  77. package/skill-assets/sunlint-code-quality/rules/csharp/S034-host-prefix-cookie.md +31 -0
  78. package/skill-assets/sunlint-code-quality/rules/csharp/S035-app-hostnames.md +26 -0
  79. package/skill-assets/sunlint-code-quality/rules/csharp/S036-internal-file-paths.md +36 -0
  80. package/skill-assets/sunlint-code-quality/rules/csharp/S037-anti-cache-headers.md +33 -0
  81. package/skill-assets/sunlint-code-quality/rules/csharp/S039-tls-certificate-validation.md +41 -0
  82. package/skill-assets/sunlint-code-quality/rules/csharp/S041-logout-invalidation.md +36 -0
  83. package/skill-assets/sunlint-code-quality/rules/csharp/S042-long-lived-sessions.md +47 -0
  84. package/skill-assets/sunlint-code-quality/rules/csharp/S044-critical-changes-reauth.md +45 -0
  85. package/skill-assets/sunlint-code-quality/rules/csharp/S045-brute-force-protection.md +48 -0
  86. package/skill-assets/sunlint-code-quality/rules/csharp/S047-oauth-csrf-protection.md +53 -0
  87. package/skill-assets/sunlint-code-quality/rules/csharp/S048-oauth-redirect-validation.md +37 -0
  88. package/skill-assets/sunlint-code-quality/rules/csharp/S049-auth-code-expiry.md +33 -0
  89. package/skill-assets/sunlint-code-quality/rules/csharp/S050-token-entropy.md +33 -0
  90. package/skill-assets/sunlint-code-quality/rules/csharp/S051-password-length.md +35 -0
  91. package/skill-assets/sunlint-code-quality/rules/csharp/S052-otp-entropy.md +26 -0
  92. package/skill-assets/sunlint-code-quality/rules/csharp/S053-generic-error-messages.md +32 -0
  93. package/skill-assets/sunlint-code-quality/rules/csharp/S054-no-default-admin.md +31 -0
  94. package/skill-assets/sunlint-code-quality/rules/csharp/S055-content-type-validation.md +44 -0
  95. package/skill-assets/sunlint-code-quality/rules/csharp/S056-log-injection.md +33 -0
  96. package/skill-assets/sunlint-code-quality/rules/csharp/S057-synchronized-time.md +27 -0
  97. package/skill-assets/sunlint-code-quality/rules/csharp/S058-ssrf-protection.md +54 -0
  98. package/skill-assets/sunlint-code-quality/rules/java/C006-verb-noun-functions.md +36 -0
  99. package/skill-assets/sunlint-code-quality/rules/java/C013-no-dead-code.md +175 -0
  100. package/skill-assets/sunlint-code-quality/rules/java/C014-dependency-injection.md +42 -0
  101. package/skill-assets/sunlint-code-quality/rules/java/C017-no-constructor-logic.md +39 -0
  102. package/skill-assets/sunlint-code-quality/rules/java/C018-generic-errors.md +28 -0
  103. package/skill-assets/sunlint-code-quality/rules/java/C019-error-log-level.md +34 -0
  104. package/skill-assets/sunlint-code-quality/rules/java/C020-no-unused-imports.md +34 -0
  105. package/skill-assets/sunlint-code-quality/rules/java/C022-no-unused-variables.md +31 -0
  106. package/skill-assets/sunlint-code-quality/rules/java/C023-no-duplicate-names.md +37 -0
  107. package/skill-assets/sunlint-code-quality/rules/java/C024-centralize-constants.md +36 -0
  108. package/skill-assets/sunlint-code-quality/rules/java/C029-catch-log-root-cause.md +42 -0
  109. package/skill-assets/sunlint-code-quality/rules/java/C030-custom-error-classes.md +50 -0
  110. package/skill-assets/sunlint-code-quality/rules/java/C033-separate-data-access.md +46 -0
  111. package/skill-assets/sunlint-code-quality/rules/java/C035-error-context-logging.md +38 -0
  112. package/skill-assets/sunlint-code-quality/rules/java/C041-no-hardcoded-secrets.md +34 -0
  113. package/skill-assets/sunlint-code-quality/rules/java/C042-boolean-naming.md +27 -0
  114. package/skill-assets/sunlint-code-quality/rules/java/C052-controller-parsing.md +39 -0
  115. package/skill-assets/sunlint-code-quality/rules/java/C060-superclass-logic.md +32 -0
  116. package/skill-assets/sunlint-code-quality/rules/java/C067-no-hardcoded-config.md +31 -0
  117. package/skill-assets/sunlint-code-quality/rules/java/S003-open-redirect.md +38 -0
  118. package/skill-assets/sunlint-code-quality/rules/java/S004-no-log-credentials.md +36 -0
  119. package/skill-assets/sunlint-code-quality/rules/java/S005-server-authorization.md +53 -0
  120. package/skill-assets/sunlint-code-quality/rules/java/S006-default-credentials.md +39 -0
  121. package/skill-assets/sunlint-code-quality/rules/java/S007-output-encoding.md +49 -0
  122. package/skill-assets/sunlint-code-quality/rules/java/S009-approved-crypto.md +40 -0
  123. package/skill-assets/sunlint-code-quality/rules/java/S010-csprng.md +36 -0
  124. package/skill-assets/sunlint-code-quality/rules/java/S011-encrypted-client-hello.md +27 -0
  125. package/skill-assets/sunlint-code-quality/rules/java/S012-secrets-management.md +34 -0
  126. package/skill-assets/sunlint-code-quality/rules/java/S013-tls-connections.md +40 -0
  127. package/skill-assets/sunlint-code-quality/rules/java/S016-no-sensitive-query-string.md +36 -0
  128. package/skill-assets/sunlint-code-quality/rules/java/S017-parameterized-queries.md +47 -0
  129. package/skill-assets/sunlint-code-quality/rules/java/S019-email-input-sanitization.md +32 -0
  130. package/skill-assets/sunlint-code-quality/rules/java/S020-eval-code-execution.md +45 -0
  131. package/skill-assets/sunlint-code-quality/rules/java/S022-context-escaping.md +28 -0
  132. package/skill-assets/sunlint-code-quality/rules/java/S023-dynamic-js-encoding.md +28 -0
  133. package/skill-assets/sunlint-code-quality/rules/java/S025-server-validation.md +58 -0
  134. package/skill-assets/sunlint-code-quality/rules/java/S026-tls-encryption.md +57 -0
  135. package/skill-assets/sunlint-code-quality/rules/java/S027-mtls-validation.md +26 -0
  136. package/skill-assets/sunlint-code-quality/rules/java/S028-upload-limits.md +35 -0
  137. package/skill-assets/sunlint-code-quality/rules/java/S029-csrf-protection.md +35 -0
  138. package/skill-assets/sunlint-code-quality/rules/java/S030-directory-browsing.md +38 -0
  139. package/skill-assets/sunlint-code-quality/rules/java/S031-secure-cookie-flag.md +38 -0
  140. package/skill-assets/sunlint-code-quality/rules/java/S032-httponly-cookie.md +31 -0
  141. package/skill-assets/sunlint-code-quality/rules/java/S033-samesite-cookie.md +42 -0
  142. package/skill-assets/sunlint-code-quality/rules/java/S034-host-prefix-cookie.md +35 -0
  143. package/skill-assets/sunlint-code-quality/rules/java/S035-app-hostnames.md +23 -0
  144. package/skill-assets/sunlint-code-quality/rules/java/S036-internal-file-paths.md +39 -0
  145. package/skill-assets/sunlint-code-quality/rules/java/S037-anti-cache-headers.md +37 -0
  146. package/skill-assets/sunlint-code-quality/rules/java/S039-tls-certificate-validation.md +43 -0
  147. package/skill-assets/sunlint-code-quality/rules/java/S041-logout-invalidation.md +53 -0
  148. package/skill-assets/sunlint-code-quality/rules/java/S042-long-lived-sessions.md +36 -0
  149. package/skill-assets/sunlint-code-quality/rules/java/S044-critical-changes-reauth.md +28 -0
  150. package/skill-assets/sunlint-code-quality/rules/java/S045-brute-force-protection.md +38 -0
  151. package/skill-assets/sunlint-code-quality/rules/java/S047-oauth-csrf-protection.md +33 -0
  152. package/skill-assets/sunlint-code-quality/rules/java/S048-oauth-redirect-validation.md +25 -0
  153. package/skill-assets/sunlint-code-quality/rules/java/S049-auth-code-expiry.md +23 -0
  154. package/skill-assets/sunlint-code-quality/rules/java/S050-token-entropy.md +20 -0
  155. package/skill-assets/sunlint-code-quality/rules/java/S051-password-length.md +20 -0
  156. package/skill-assets/sunlint-code-quality/rules/java/S052-otp-entropy.md +23 -0
  157. package/skill-assets/sunlint-code-quality/rules/java/S053-generic-error-messages.md +21 -0
  158. package/skill-assets/sunlint-code-quality/rules/java/S054-no-default-admin.md +16 -0
  159. package/skill-assets/sunlint-code-quality/rules/java/S055-content-type-validation.md +36 -0
  160. package/skill-assets/sunlint-code-quality/rules/java/S056-log-injection.md +38 -0
  161. package/skill-assets/sunlint-code-quality/rules/java/S057-synchronized-time.md +35 -0
  162. package/skill-assets/sunlint-code-quality/rules/java/S058-ssrf-protection.md +56 -0
  163. package/skill-assets/sunlint-code-quality/rules/kotlin/C006-verb-noun-functions.md +45 -0
  164. package/skill-assets/sunlint-code-quality/rules/kotlin/C013-no-dead-code.md +49 -0
  165. package/skill-assets/sunlint-code-quality/rules/kotlin/C014-dependency-injection.md +64 -0
  166. package/skill-assets/sunlint-code-quality/rules/kotlin/C017-no-constructor-logic.md +68 -0
  167. package/skill-assets/sunlint-code-quality/rules/kotlin/C018-generic-errors.md +46 -0
  168. package/skill-assets/sunlint-code-quality/rules/kotlin/C019-error-log-level.md +50 -0
  169. package/skill-assets/sunlint-code-quality/rules/kotlin/C020-no-unused-imports.md +44 -0
  170. package/skill-assets/sunlint-code-quality/rules/kotlin/C022-no-unused-variables.md +39 -0
  171. package/skill-assets/sunlint-code-quality/rules/kotlin/C023-no-duplicate-names.md +47 -0
  172. package/skill-assets/sunlint-code-quality/rules/kotlin/C024-centralize-constants.md +58 -0
  173. package/skill-assets/sunlint-code-quality/rules/kotlin/C029-catch-log-root-cause.md +50 -0
  174. package/skill-assets/sunlint-code-quality/rules/kotlin/C030-custom-error-classes.md +72 -0
  175. package/skill-assets/sunlint-code-quality/rules/kotlin/C033-separate-data-access.md +69 -0
  176. package/skill-assets/sunlint-code-quality/rules/kotlin/C035-error-context-logging.md +47 -0
  177. package/skill-assets/sunlint-code-quality/rules/kotlin/C041-no-hardcoded-secrets.md +47 -0
  178. package/skill-assets/sunlint-code-quality/rules/kotlin/C042-boolean-naming.md +42 -0
  179. package/skill-assets/sunlint-code-quality/rules/kotlin/C052-controller-parsing.md +71 -0
  180. package/skill-assets/sunlint-code-quality/rules/kotlin/C060-superclass-logic.md +60 -0
  181. package/skill-assets/sunlint-code-quality/rules/kotlin/C067-no-hardcoded-config.md +51 -0
  182. package/skill-assets/sunlint-code-quality/rules/kotlin/S003-open-redirect.md +66 -0
  183. package/skill-assets/sunlint-code-quality/rules/kotlin/S004-no-log-credentials.md +59 -0
  184. package/skill-assets/sunlint-code-quality/rules/kotlin/S005-server-authorization.md +75 -0
  185. package/skill-assets/sunlint-code-quality/rules/kotlin/S006-default-credentials.md +49 -0
  186. package/skill-assets/sunlint-code-quality/rules/kotlin/S007-output-encoding.md +62 -0
  187. package/skill-assets/sunlint-code-quality/rules/kotlin/S009-approved-crypto.md +51 -0
  188. package/skill-assets/sunlint-code-quality/rules/kotlin/S010-csprng.md +61 -0
  189. package/skill-assets/sunlint-code-quality/rules/kotlin/S011-encrypted-client-hello.md +48 -0
  190. package/skill-assets/sunlint-code-quality/rules/kotlin/S012-secrets-management.md +53 -0
  191. package/skill-assets/sunlint-code-quality/rules/kotlin/S013-tls-connections.md +61 -0
  192. package/skill-assets/sunlint-code-quality/rules/kotlin/S016-no-sensitive-query-string.md +51 -0
  193. package/skill-assets/sunlint-code-quality/rules/kotlin/S017-parameterized-queries.md +41 -0
  194. package/skill-assets/sunlint-code-quality/rules/kotlin/S019-email-input-sanitization.md +50 -0
  195. package/skill-assets/sunlint-code-quality/rules/kotlin/S020-eval-code-execution.md +57 -0
  196. package/skill-assets/sunlint-code-quality/rules/kotlin/S022-context-escaping.md +58 -0
  197. package/skill-assets/sunlint-code-quality/rules/kotlin/S023-dynamic-js-encoding.md +57 -0
  198. package/skill-assets/sunlint-code-quality/rules/kotlin/S025-server-validation.md +59 -0
  199. package/skill-assets/sunlint-code-quality/rules/kotlin/S026-tls-encryption.md +50 -0
  200. package/skill-assets/sunlint-code-quality/rules/kotlin/S027-mtls-validation.md +60 -0
  201. package/skill-assets/sunlint-code-quality/rules/kotlin/S028-upload-limits.md +67 -0
  202. package/skill-assets/sunlint-code-quality/rules/kotlin/S029-csrf-protection.md +57 -0
  203. package/skill-assets/sunlint-code-quality/rules/kotlin/S030-directory-browsing.md +50 -0
  204. package/skill-assets/sunlint-code-quality/rules/kotlin/S031-secure-cookie-flag.md +51 -0
  205. package/skill-assets/sunlint-code-quality/rules/kotlin/S032-httponly-cookie.md +49 -0
  206. package/skill-assets/sunlint-code-quality/rules/kotlin/S033-samesite-cookie.md +54 -0
  207. package/skill-assets/sunlint-code-quality/rules/kotlin/S034-host-prefix-cookie.md +50 -0
  208. package/skill-assets/sunlint-code-quality/rules/kotlin/S035-app-hostnames.md +59 -0
  209. package/skill-assets/sunlint-code-quality/rules/kotlin/S036-internal-file-paths.md +61 -0
  210. package/skill-assets/sunlint-code-quality/rules/kotlin/S037-anti-cache-headers.md +58 -0
  211. package/skill-assets/sunlint-code-quality/rules/kotlin/S039-tls-certificate-validation.md +62 -0
  212. package/skill-assets/sunlint-code-quality/rules/kotlin/S041-logout-invalidation.md +71 -0
  213. package/skill-assets/sunlint-code-quality/rules/kotlin/S042-long-lived-sessions.md +57 -0
  214. package/skill-assets/sunlint-code-quality/rules/kotlin/S044-critical-changes-reauth.md +64 -0
  215. package/skill-assets/sunlint-code-quality/rules/kotlin/S045-brute-force-protection.md +64 -0
  216. package/skill-assets/sunlint-code-quality/rules/kotlin/S047-oauth-csrf-protection.md +74 -0
  217. package/skill-assets/sunlint-code-quality/rules/kotlin/S048-oauth-redirect-validation.md +61 -0
  218. package/skill-assets/sunlint-code-quality/rules/kotlin/S049-auth-code-expiry.md +70 -0
  219. package/skill-assets/sunlint-code-quality/rules/kotlin/S050-token-entropy.md +65 -0
  220. package/skill-assets/sunlint-code-quality/rules/kotlin/S051-password-length.md +52 -0
  221. package/skill-assets/sunlint-code-quality/rules/kotlin/S052-otp-entropy.md +55 -0
  222. package/skill-assets/sunlint-code-quality/rules/kotlin/S053-generic-error-messages.md +66 -0
  223. package/skill-assets/sunlint-code-quality/rules/kotlin/S054-no-default-admin.md +57 -0
  224. package/skill-assets/sunlint-code-quality/rules/kotlin/S055-content-type-validation.md +58 -0
  225. package/skill-assets/sunlint-code-quality/rules/kotlin/S056-log-injection.md +47 -0
  226. package/skill-assets/sunlint-code-quality/rules/kotlin/S057-synchronized-time.md +49 -0
  227. package/skill-assets/sunlint-code-quality/rules/kotlin/S058-ssrf-protection.md +69 -0
  228. package/skill-assets/sunlint-code-quality/rules/php/C006-verb-noun-functions.md +46 -0
  229. package/skill-assets/sunlint-code-quality/rules/php/C013-no-dead-code.md +53 -0
  230. package/skill-assets/sunlint-code-quality/rules/php/C014-dependency-injection.md +71 -0
  231. package/skill-assets/sunlint-code-quality/rules/php/C017-no-constructor-logic.md +68 -0
  232. package/skill-assets/sunlint-code-quality/rules/php/C018-generic-errors.md +50 -0
  233. package/skill-assets/sunlint-code-quality/rules/php/C019-error-log-level.md +54 -0
  234. package/skill-assets/sunlint-code-quality/rules/php/C020-no-unused-imports.md +55 -0
  235. package/skill-assets/sunlint-code-quality/rules/php/C022-no-unused-variables.md +51 -0
  236. package/skill-assets/sunlint-code-quality/rules/php/C023-no-duplicate-names.md +61 -0
  237. package/skill-assets/sunlint-code-quality/rules/php/C024-centralize-constants.md +60 -0
  238. package/skill-assets/sunlint-code-quality/rules/php/C029-catch-log-root-cause.md +57 -0
  239. package/skill-assets/sunlint-code-quality/rules/php/C030-custom-error-classes.md +62 -0
  240. package/skill-assets/sunlint-code-quality/rules/php/C033-separate-data-access.md +79 -0
  241. package/skill-assets/sunlint-code-quality/rules/php/C035-error-context-logging.md +54 -0
  242. package/skill-assets/sunlint-code-quality/rules/php/C041-no-hardcoded-secrets.md +59 -0
  243. package/skill-assets/sunlint-code-quality/rules/php/C042-boolean-naming.md +52 -0
  244. package/skill-assets/sunlint-code-quality/rules/php/C052-controller-parsing.md +66 -0
  245. package/skill-assets/sunlint-code-quality/rules/php/C060-superclass-logic.md +54 -0
  246. package/skill-assets/sunlint-code-quality/rules/php/C067-no-hardcoded-config.md +55 -0
  247. package/skill-assets/sunlint-code-quality/rules/php/S003-open-redirect.md +60 -0
  248. package/skill-assets/sunlint-code-quality/rules/php/S004-no-log-credentials.md +67 -0
  249. package/skill-assets/sunlint-code-quality/rules/php/S005-server-authorization.md +57 -0
  250. package/skill-assets/sunlint-code-quality/rules/php/S006-default-credentials.md +61 -0
  251. package/skill-assets/sunlint-code-quality/rules/php/S007-output-encoding.md +61 -0
  252. package/skill-assets/sunlint-code-quality/rules/php/S009-approved-crypto.md +53 -0
  253. package/skill-assets/sunlint-code-quality/rules/php/S010-csprng.md +47 -0
  254. package/skill-assets/sunlint-code-quality/rules/php/S011-encrypted-client-hello.md +41 -0
  255. package/skill-assets/sunlint-code-quality/rules/php/S012-secrets-management.md +60 -0
  256. package/skill-assets/sunlint-code-quality/rules/php/S013-tls-connections.md +67 -0
  257. package/skill-assets/sunlint-code-quality/rules/php/S016-no-sensitive-query-string.md +61 -0
  258. package/skill-assets/sunlint-code-quality/rules/php/S017-parameterized-queries.md +44 -0
  259. package/skill-assets/sunlint-code-quality/rules/php/S019-email-input-sanitization.md +54 -0
  260. package/skill-assets/sunlint-code-quality/rules/php/S020-eval-code-execution.md +57 -0
  261. package/skill-assets/sunlint-code-quality/rules/php/S022-context-escaping.md +58 -0
  262. package/skill-assets/sunlint-code-quality/rules/php/S023-dynamic-js-encoding.md +62 -0
  263. package/skill-assets/sunlint-code-quality/rules/php/S025-server-validation.md +63 -0
  264. package/skill-assets/sunlint-code-quality/rules/php/S026-tls-encryption.md +48 -0
  265. package/skill-assets/sunlint-code-quality/rules/php/S027-mtls-validation.md +62 -0
  266. package/skill-assets/sunlint-code-quality/rules/php/S028-upload-limits.md +60 -0
  267. package/skill-assets/sunlint-code-quality/rules/php/S029-csrf-protection.md +65 -0
  268. package/skill-assets/sunlint-code-quality/rules/php/S030-directory-browsing.md +40 -0
  269. package/skill-assets/sunlint-code-quality/rules/php/S031-secure-cookie-flag.md +55 -0
  270. package/skill-assets/sunlint-code-quality/rules/php/S032-httponly-cookie.md +54 -0
  271. package/skill-assets/sunlint-code-quality/rules/php/S033-samesite-cookie.md +52 -0
  272. package/skill-assets/sunlint-code-quality/rules/php/S034-host-prefix-cookie.md +49 -0
  273. package/skill-assets/sunlint-code-quality/rules/php/S035-app-hostnames.md +49 -0
  274. package/skill-assets/sunlint-code-quality/rules/php/S036-internal-file-paths.md +56 -0
  275. package/skill-assets/sunlint-code-quality/rules/php/S037-anti-cache-headers.md +56 -0
  276. package/skill-assets/sunlint-code-quality/rules/php/S039-tls-certificate-validation.md +54 -0
  277. package/skill-assets/sunlint-code-quality/rules/php/S041-logout-invalidation.md +63 -0
  278. package/skill-assets/sunlint-code-quality/rules/php/S042-long-lived-sessions.md +57 -0
  279. package/skill-assets/sunlint-code-quality/rules/php/S044-critical-changes-reauth.md +71 -0
  280. package/skill-assets/sunlint-code-quality/rules/php/S045-brute-force-protection.md +67 -0
  281. package/skill-assets/sunlint-code-quality/rules/php/S047-oauth-csrf-protection.md +72 -0
  282. package/skill-assets/sunlint-code-quality/rules/php/S048-oauth-redirect-validation.md +54 -0
  283. package/skill-assets/sunlint-code-quality/rules/php/S049-auth-code-expiry.md +71 -0
  284. package/skill-assets/sunlint-code-quality/rules/php/S050-token-entropy.md +58 -0
  285. package/skill-assets/sunlint-code-quality/rules/php/S051-password-length.md +59 -0
  286. package/skill-assets/sunlint-code-quality/rules/php/S052-otp-entropy.md +45 -0
  287. package/skill-assets/sunlint-code-quality/rules/php/S053-generic-error-messages.md +59 -0
  288. package/skill-assets/sunlint-code-quality/rules/php/S054-no-default-admin.md +62 -0
  289. package/skill-assets/sunlint-code-quality/rules/php/S055-content-type-validation.md +58 -0
  290. package/skill-assets/sunlint-code-quality/rules/php/S056-log-injection.md +48 -0
  291. package/skill-assets/sunlint-code-quality/rules/php/S057-synchronized-time.md +52 -0
  292. package/skill-assets/sunlint-code-quality/rules/php/S058-ssrf-protection.md +65 -0
  293. package/skill-assets/sunlint-code-quality/rules/python/C006-verb-noun-functions.md +30 -0
  294. package/skill-assets/sunlint-code-quality/rules/python/C013-no-dead-code.md +24 -0
  295. package/skill-assets/sunlint-code-quality/rules/python/C014-dependency-injection.md +68 -0
  296. package/skill-assets/sunlint-code-quality/rules/python/C017-no-constructor-logic.md +30 -0
  297. package/skill-assets/sunlint-code-quality/rules/python/C018-generic-errors.md +25 -0
  298. package/skill-assets/sunlint-code-quality/rules/python/C019-error-log-level.md +26 -0
  299. package/skill-assets/sunlint-code-quality/rules/python/C020-no-unused-imports.md +28 -0
  300. package/skill-assets/sunlint-code-quality/rules/python/C022-no-unused-variables.md +24 -0
  301. package/skill-assets/sunlint-code-quality/rules/python/C023-no-duplicate-names.md +27 -0
  302. package/skill-assets/sunlint-code-quality/rules/python/C024-centralize-constants.md +27 -0
  303. package/skill-assets/sunlint-code-quality/rules/python/C029-catch-log-root-cause.md +61 -0
  304. package/skill-assets/sunlint-code-quality/rules/python/C030-custom-error-classes.md +28 -0
  305. package/skill-assets/sunlint-code-quality/rules/python/C033-separate-data-access.md +53 -0
  306. package/skill-assets/sunlint-code-quality/rules/python/C035-error-context-logging.md +26 -0
  307. package/skill-assets/sunlint-code-quality/rules/python/C041-no-hardcoded-secrets.md +23 -0
  308. package/skill-assets/sunlint-code-quality/rules/python/C042-boolean-naming.md +24 -0
  309. package/skill-assets/sunlint-code-quality/rules/python/C052-controller-parsing.md +34 -0
  310. package/skill-assets/sunlint-code-quality/rules/python/C060-superclass-logic.md +26 -0
  311. package/skill-assets/sunlint-code-quality/rules/python/C067-no-hardcoded-config.md +22 -0
  312. package/skill-assets/sunlint-code-quality/rules/python/S003-open-redirect.md +16 -0
  313. package/skill-assets/sunlint-code-quality/rules/python/S004-no-log-credentials.md +16 -0
  314. package/skill-assets/sunlint-code-quality/rules/python/S005-server-authorization.md +16 -0
  315. package/skill-assets/sunlint-code-quality/rules/python/S006-default-credentials.md +16 -0
  316. package/skill-assets/sunlint-code-quality/rules/python/S007-output-encoding.md +16 -0
  317. package/skill-assets/sunlint-code-quality/rules/python/S009-approved-crypto.md +16 -0
  318. package/skill-assets/sunlint-code-quality/rules/python/S010-csprng.md +16 -0
  319. package/skill-assets/sunlint-code-quality/rules/python/S011-encrypted-client-hello.md +16 -0
  320. package/skill-assets/sunlint-code-quality/rules/python/S012-secrets-management.md +16 -0
  321. package/skill-assets/sunlint-code-quality/rules/python/S013-tls-connections.md +16 -0
  322. package/skill-assets/sunlint-code-quality/rules/python/S016-no-sensitive-query-string.md +16 -0
  323. package/skill-assets/sunlint-code-quality/rules/python/S017-parameterized-queries.md +51 -0
  324. package/skill-assets/sunlint-code-quality/rules/python/S019-email-input-sanitization.md +16 -0
  325. package/skill-assets/sunlint-code-quality/rules/python/S020-eval-code-execution.md +51 -0
  326. package/skill-assets/sunlint-code-quality/rules/python/S022-context-escaping.md +16 -0
  327. package/skill-assets/sunlint-code-quality/rules/python/S023-dynamic-js-encoding.md +16 -0
  328. package/skill-assets/sunlint-code-quality/rules/python/S025-server-validation.md +16 -0
  329. package/skill-assets/sunlint-code-quality/rules/python/S026-tls-encryption.md +16 -0
  330. package/skill-assets/sunlint-code-quality/rules/python/S027-mtls-validation.md +16 -0
  331. package/skill-assets/sunlint-code-quality/rules/python/S028-upload-limits.md +16 -0
  332. package/skill-assets/sunlint-code-quality/rules/python/S029-csrf-protection.md +16 -0
  333. package/skill-assets/sunlint-code-quality/rules/python/S030-directory-browsing.md +16 -0
  334. package/skill-assets/sunlint-code-quality/rules/python/S031-secure-cookie-flag.md +16 -0
  335. package/skill-assets/sunlint-code-quality/rules/python/S032-httponly-cookie.md +16 -0
  336. package/skill-assets/sunlint-code-quality/rules/python/S033-samesite-cookie.md +16 -0
  337. package/skill-assets/sunlint-code-quality/rules/python/S034-host-prefix-cookie.md +16 -0
  338. package/skill-assets/sunlint-code-quality/rules/python/S035-app-hostnames.md +16 -0
  339. package/skill-assets/sunlint-code-quality/rules/python/S036-internal-file-paths.md +50 -0
  340. package/skill-assets/sunlint-code-quality/rules/python/S037-anti-cache-headers.md +16 -0
  341. package/skill-assets/sunlint-code-quality/rules/python/S039-tls-certificate-validation.md +16 -0
  342. package/skill-assets/sunlint-code-quality/rules/python/S041-logout-invalidation.md +16 -0
  343. package/skill-assets/sunlint-code-quality/rules/python/S042-long-lived-sessions.md +16 -0
  344. package/skill-assets/sunlint-code-quality/rules/python/S044-critical-changes-reauth.md +16 -0
  345. package/skill-assets/sunlint-code-quality/rules/python/S045-brute-force-protection.md +16 -0
  346. package/skill-assets/sunlint-code-quality/rules/python/S047-oauth-csrf-protection.md +16 -0
  347. package/skill-assets/sunlint-code-quality/rules/python/S048-oauth-redirect-validation.md +16 -0
  348. package/skill-assets/sunlint-code-quality/rules/python/S049-auth-code-expiry.md +16 -0
  349. package/skill-assets/sunlint-code-quality/rules/python/S050-token-entropy.md +16 -0
  350. package/skill-assets/sunlint-code-quality/rules/python/S051-password-length.md +16 -0
  351. package/skill-assets/sunlint-code-quality/rules/python/S052-otp-entropy.md +16 -0
  352. package/skill-assets/sunlint-code-quality/rules/python/S053-generic-error-messages.md +16 -0
  353. package/skill-assets/sunlint-code-quality/rules/python/S054-no-default-admin.md +16 -0
  354. package/skill-assets/sunlint-code-quality/rules/python/S055-content-type-validation.md +16 -0
  355. package/skill-assets/sunlint-code-quality/rules/python/S056-log-injection.md +16 -0
  356. package/skill-assets/sunlint-code-quality/rules/python/S057-synchronized-time.md +16 -0
  357. package/skill-assets/sunlint-code-quality/rules/python/S058-ssrf-protection.md +57 -0
  358. package/skill-assets/sunlint-code-quality/rules/typescript/C006-verb-noun-functions.md +45 -0
  359. package/skill-assets/sunlint-code-quality/rules/typescript/C013-no-dead-code.md +51 -0
  360. package/skill-assets/sunlint-code-quality/rules/typescript/C014-dependency-injection.md +69 -0
  361. package/skill-assets/sunlint-code-quality/rules/typescript/C017-no-constructor-logic.md +60 -0
  362. package/skill-assets/sunlint-code-quality/rules/typescript/C018-generic-errors.md +47 -0
  363. package/skill-assets/sunlint-code-quality/rules/typescript/C019-error-log-level.md +50 -0
  364. package/skill-assets/sunlint-code-quality/rules/typescript/C020-no-unused-imports.md +55 -0
  365. package/skill-assets/sunlint-code-quality/rules/typescript/C022-no-unused-variables.md +59 -0
  366. package/skill-assets/sunlint-code-quality/rules/typescript/C023-no-duplicate-names.md +58 -0
  367. package/skill-assets/sunlint-code-quality/rules/typescript/C024-centralize-constants.md +56 -0
  368. package/skill-assets/sunlint-code-quality/rules/typescript/C029-catch-log-root-cause.md +53 -0
  369. package/skill-assets/sunlint-code-quality/rules/typescript/C030-custom-error-classes.md +60 -0
  370. package/skill-assets/sunlint-code-quality/rules/typescript/C033-separate-data-access.md +69 -0
  371. package/skill-assets/sunlint-code-quality/rules/typescript/C035-error-context-logging.md +50 -0
  372. package/skill-assets/sunlint-code-quality/rules/typescript/C041-no-hardcoded-secrets.md +47 -0
  373. package/skill-assets/sunlint-code-quality/rules/typescript/C042-boolean-naming.md +42 -0
  374. package/skill-assets/sunlint-code-quality/rules/typescript/C052-controller-parsing.md +64 -0
  375. package/skill-assets/sunlint-code-quality/rules/typescript/C060-superclass-logic.md +67 -0
  376. package/skill-assets/sunlint-code-quality/rules/typescript/C067-no-hardcoded-config.md +52 -0
  377. package/skill-assets/sunlint-code-quality/rules/typescript/S003-open-redirect.md +76 -0
  378. package/skill-assets/sunlint-code-quality/rules/typescript/S004-no-log-credentials.md +71 -0
  379. package/skill-assets/sunlint-code-quality/rules/typescript/S005-server-authorization.md +68 -0
  380. package/skill-assets/sunlint-code-quality/rules/typescript/S006-default-credentials.md +69 -0
  381. package/skill-assets/sunlint-code-quality/rules/typescript/S007-output-encoding.md +60 -0
  382. package/skill-assets/sunlint-code-quality/rules/typescript/S009-approved-crypto.md +53 -0
  383. package/skill-assets/sunlint-code-quality/rules/typescript/S010-csprng.md +53 -0
  384. package/skill-assets/sunlint-code-quality/rules/typescript/S011-encrypted-client-hello.md +45 -0
  385. package/skill-assets/sunlint-code-quality/rules/typescript/S012-secrets-management.md +47 -0
  386. package/skill-assets/sunlint-code-quality/rules/typescript/S013-tls-connections.md +70 -0
  387. package/skill-assets/sunlint-code-quality/rules/typescript/S016-no-sensitive-query-string.md +53 -0
  388. package/skill-assets/sunlint-code-quality/rules/typescript/S017-parameterized-queries.md +55 -0
  389. package/skill-assets/sunlint-code-quality/rules/typescript/S019-email-input-sanitization.md +56 -0
  390. package/skill-assets/sunlint-code-quality/rules/typescript/S020-eval-code-execution.md +58 -0
  391. package/skill-assets/sunlint-code-quality/rules/typescript/S022-context-escaping.md +48 -0
  392. package/skill-assets/sunlint-code-quality/rules/typescript/S023-dynamic-js-encoding.md +52 -0
  393. package/skill-assets/sunlint-code-quality/rules/typescript/S025-server-validation.md +62 -0
  394. package/skill-assets/sunlint-code-quality/rules/typescript/S026-tls-encryption.md +47 -0
  395. package/skill-assets/sunlint-code-quality/rules/typescript/S027-mtls-validation.md +50 -0
  396. package/skill-assets/sunlint-code-quality/rules/typescript/S028-upload-limits.md +65 -0
  397. package/skill-assets/sunlint-code-quality/rules/typescript/S029-csrf-protection.md +62 -0
  398. package/skill-assets/sunlint-code-quality/rules/typescript/S030-directory-browsing.md +52 -0
  399. package/skill-assets/sunlint-code-quality/rules/typescript/S031-secure-cookie-flag.md +48 -0
  400. package/skill-assets/sunlint-code-quality/rules/typescript/S032-httponly-cookie.md +36 -0
  401. package/skill-assets/sunlint-code-quality/rules/typescript/S033-samesite-cookie.md +46 -0
  402. package/skill-assets/sunlint-code-quality/rules/typescript/S034-host-prefix-cookie.md +50 -0
  403. package/skill-assets/sunlint-code-quality/rules/typescript/S035-app-hostnames.md +49 -0
  404. package/skill-assets/sunlint-code-quality/rules/typescript/S036-internal-file-paths.md +53 -0
  405. package/skill-assets/sunlint-code-quality/rules/typescript/S037-anti-cache-headers.md +52 -0
  406. package/skill-assets/sunlint-code-quality/rules/typescript/S039-tls-certificate-validation.md +51 -0
  407. package/skill-assets/sunlint-code-quality/rules/typescript/S041-logout-invalidation.md +58 -0
  408. package/skill-assets/sunlint-code-quality/rules/typescript/S042-long-lived-sessions.md +55 -0
  409. package/skill-assets/sunlint-code-quality/rules/typescript/S044-critical-changes-reauth.md +69 -0
  410. package/skill-assets/sunlint-code-quality/rules/typescript/S045-brute-force-protection.md +59 -0
  411. package/skill-assets/sunlint-code-quality/rules/typescript/S047-oauth-csrf-protection.md +60 -0
  412. package/skill-assets/sunlint-code-quality/rules/typescript/S048-oauth-redirect-validation.md +59 -0
  413. package/skill-assets/sunlint-code-quality/rules/typescript/S049-auth-code-expiry.md +73 -0
  414. package/skill-assets/sunlint-code-quality/rules/typescript/S050-token-entropy.md +48 -0
  415. package/skill-assets/sunlint-code-quality/rules/typescript/S051-password-length.md +60 -0
  416. package/skill-assets/sunlint-code-quality/rules/typescript/S052-otp-entropy.md +49 -0
  417. package/skill-assets/sunlint-code-quality/rules/typescript/S053-generic-error-messages.md +61 -0
  418. package/skill-assets/sunlint-code-quality/rules/typescript/S054-no-default-admin.md +64 -0
  419. package/skill-assets/sunlint-code-quality/rules/typescript/S055-content-type-validation.md +64 -0
  420. package/skill-assets/sunlint-code-quality/rules/typescript/S056-log-injection.md +48 -0
  421. package/skill-assets/sunlint-code-quality/rules/typescript/S057-synchronized-time.md +57 -0
  422. package/skill-assets/sunlint-code-quality/rules/typescript/S058-ssrf-protection.md +63 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: Apply CSRF Protection
3
+ impact: HIGH
4
+ impactDescription: prevents cross-site request forgery attacks
5
+ tags: csrf, tokens, forms, security, csharp
6
+ ---
7
+
8
+ ## Apply CSRF Protection
9
+
10
+ CSRF attacks trick users into submitting malicious requests. ASP.NET Core provides built-in protection.
11
+
12
+ **Incorrect (disabled or missing validation):**
13
+
14
+ ```csharp
15
+ [HttpPost]
16
+ // Missing [ValidateAntiForgeryToken]
17
+ public IActionResult Transfer(int amount)
18
+ {
19
+ // ...
20
+ }
21
+ ```
22
+
23
+ **Correct (enabled protection):**
24
+
25
+ ```csharp
26
+ [HttpPost]
27
+ [ValidateAntiForgeryToken] // Enforce token validation
28
+ public IActionResult Transfer(int amount)
29
+ {
30
+ // ...
31
+ }
32
+
33
+ // In Razor Pages, this is automatic for <form> tags.
34
+ // For AJAX, send the token in a header:
35
+ /*
36
+ headers: {
37
+ "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val()
38
+ }
39
+ */
40
+ ```
41
+
42
+ **Tools:** Roslyn Analyzers (CA5391), SonarQube
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: Disable Directory Browsing
3
+ impact: MEDIUM
4
+ impactDescription: prevents information disclosure
5
+ tags: configuration, information-disclosure, security, csharp
6
+ ---
7
+
8
+ ## Disable Directory Browsing
9
+
10
+ Directory browsing allows attackers to verify file existence and structure.
11
+
12
+ **Incorrect (enabled):**
13
+
14
+ ```csharp
15
+ app.UseDirectoryBrowser(); // Dangerous in production
16
+ ```
17
+
18
+ **Correct (disabled):**
19
+
20
+ ```csharp
21
+ // Remove UseDirectoryBrowser() call.
22
+ // Only use StaticFiles
23
+ app.UseStaticFiles();
24
+ ```
25
+
26
+ **Tools:** Manual Review
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: Set Secure Flag On Session Cookies
3
+ impact: HIGH
4
+ impactDescription: prevents cookie theft over HTTP
5
+ tags: cookies, session, https, security, csharp
6
+ ---
7
+
8
+ ## Set Secure Flag On Session Cookies
9
+
10
+ Session cookies must only be sent over HTTPS.
11
+
12
+ **Incorrect (missing secure):**
13
+
14
+ ```csharp
15
+ Response.Cookies.Append("session", token); // Defaults to Secure=false often
16
+ ```
17
+
18
+ **Correct (Secure=true):**
19
+
20
+ ```csharp
21
+ var options = new CookieOptions
22
+ {
23
+ Secure = true, // Only HTTPS
24
+ HttpOnly = true
25
+ };
26
+ Response.Cookies.Append("session", token, options);
27
+
28
+ // Global Policy
29
+ services.Configure<CookiePolicyOptions>(options =>
30
+ {
31
+ options.Secure = CookieSecurePolicy.Always;
32
+ });
33
+ ```
34
+
35
+ **Tools:** Browser DevTools, OWASP ZAP
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Set HttpOnly On Session Cookies
3
+ impact: HIGH
4
+ impactDescription: prevents XSS cookie theft
5
+ tags: cookies, session, xss, security, csharp
6
+ ---
7
+
8
+ ## Set HttpOnly On Session Cookies
9
+
10
+ HttpOnly cookies cannot be accessed by JavaScript, preventing XSS attacks from stealing sessions.
11
+
12
+ **Incorrect (HttpOnly=false):**
13
+
14
+ ```csharp
15
+ var options = new CookieOptions
16
+ {
17
+ HttpOnly = false // Accessible via document.cookie
18
+ };
19
+ ```
20
+
21
+ **Correct (HttpOnly=true):**
22
+
23
+ ```csharp
24
+ var options = new CookieOptions
25
+ {
26
+ HttpOnly = true
27
+ };
28
+ Response.Cookies.Append("session", token, options);
29
+ ```
30
+
31
+ **Tools:** Browser DevTools
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: Set SameSite On Session Cookies
3
+ impact: HIGH
4
+ impactDescription: prevents CSRF attacks
5
+ tags: cookies, session, csrf, security, csharp
6
+ ---
7
+
8
+ ## Set SameSite On Session Cookies
9
+
10
+ SameSite prevents cookies from being sent in cross-site requests, mitigating CSRF.
11
+
12
+ **Incorrect (None/Lax):**
13
+
14
+ ```csharp
15
+ var options = new CookieOptions
16
+ {
17
+ SameSite = SameSiteMode.None // Vulnerable to CSRF
18
+ };
19
+ ```
20
+
21
+ **Correct (Strict/Lax):**
22
+
23
+ ```csharp
24
+ var options = new CookieOptions
25
+ {
26
+ SameSite = SameSiteMode.Strict // Best security
27
+ };
28
+
29
+ // OR Lax (allows top-level navigation)
30
+ var options = new CookieOptions
31
+ {
32
+ SameSite = SameSiteMode.Lax
33
+ };
34
+ ```
35
+
36
+ **Tools:** Browser DevTools
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Use __Host- Prefix For Cookies
3
+ impact: MEDIUM
4
+ impactDescription: enforces strict cookie security attributes
5
+ tags: cookies, naming, security, csharp
6
+ ---
7
+
8
+ ## Use __Host- Prefix For Cookies
9
+
10
+ Prefixing cookies with `__Host-` forces the browser to require `Secure`, `Path=/`, and no `Domain` attribute.
11
+
12
+ **Incorrect:**
13
+
14
+ ```csharp
15
+ Response.Cookies.Append("session", token);
16
+ ```
17
+
18
+ **Correct:**
19
+
20
+ ```csharp
21
+ // Browser rejects this cookie if attributes are missing
22
+ var options = new CookieOptions
23
+ {
24
+ Secure = true,
25
+ Path = "/",
26
+ // Domain must be null
27
+ };
28
+ Response.Cookies.Append("__Host-session", token, options);
29
+ ```
30
+
31
+ **Tools:** Browser DevTools
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: Host Apps On Different Hostnames
3
+ impact: MEDIUM
4
+ impactDescription: prevents cookie leaking and same-origin issues
5
+ tags: architecture, deployment, security, csharp
6
+ ---
7
+
8
+ ## Host Apps On Different Hostnames
9
+
10
+ Don't host untrusted content on the same domain as sensitive apps.
11
+
12
+ **Incorrect:**
13
+
14
+ ```
15
+ App: example.com
16
+ User Content: example.com/uploads/malicious.html (Can read cookies via XSS)
17
+ ```
18
+
19
+ **Correct:**
20
+
21
+ ```
22
+ App: app.example.com
23
+ User Content: user-content.com
24
+ ```
25
+
26
+ **Tools:** Architecture Review
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: Use Internal Data For File Paths (Path Traversal)
3
+ impact: HIGH
4
+ impactDescription: prevents path traversal attacks
5
+ tags: file-system, path-traversal, security, csharp
6
+ ---
7
+
8
+ ## Use Internal Data For File Paths (Path Traversal)
9
+
10
+ Never use user input directly in file paths.
11
+
12
+ **Incorrect (path traversal):**
13
+
14
+ ```csharp
15
+ public IActionResult GetFile(string filename)
16
+ {
17
+ // Attacker: filename = "../../../etc/passwd"
18
+ return PhysicalFile(Path.Combine("uploads", filename), "text/plain");
19
+ }
20
+ ```
21
+
22
+ **Correct (validation):**
23
+
24
+ ```csharp
25
+ public IActionResult GetFile(string filename)
26
+ {
27
+ // 1. Use filename from DB (Internal ID)
28
+ // 2. Or validate filename has no path separators
29
+ var name = Path.GetFileName(filename); // Strips path
30
+
31
+ var path = Path.Combine(_env.WebRootPath, "uploads", name);
32
+ return PhysicalFile(path, "text/plain");
33
+ }
34
+ ```
35
+
36
+ **Tools:** Roslyn Analyzers, SonarQube
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: Set Anti-cache Headers For Sensitive Pages
3
+ impact: MEDIUM
4
+ impactDescription: prevents sensitive data caching on shared computers
5
+ tags: headers, caching, privacy, security, csharp
6
+ ---
7
+
8
+ ## Set Anti-cache Headers For Sensitive Pages
9
+
10
+ Sensitive pages shouldn't be cached by browsers or proxies.
11
+
12
+ **Incorrect (default caching):**
13
+
14
+ ```csharp
15
+ // Response might be cached
16
+ return Ok(sensitiveData);
17
+ ```
18
+
19
+ **Correct (explicit no-cache):**
20
+
21
+ ```csharp
22
+ [ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
23
+ public IActionResult GetSensitiveData()
24
+ {
25
+ return Ok(sensitiveData);
26
+ }
27
+
28
+ // Or manually
29
+ Response.Headers.Add("Cache-Control", "no-store, no-cache, must-revalidate");
30
+ Response.Headers.Add("Pragma", "no-cache");
31
+ ```
32
+
33
+ **Tools:** Developer Tools
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: TLS Clients Must Validate Server Certificates
3
+ impact: CRITICAL
4
+ impactDescription: prevents man-in-the-middle attacks
5
+ tags: tls, certificates, validation, mitm, security, csharp
6
+ ---
7
+
8
+ ## TLS Clients Must Validate Server Certificates
9
+
10
+ Disabling certificate validation (ignoring SSL errors) opens you to MITM attacks.
11
+
12
+ **Incorrect (disabling validation):**
13
+
14
+ ```csharp
15
+ var handler = new HttpClientHandler
16
+ {
17
+ // DANGEROUS: Accepts any certificate
18
+ ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) => true
19
+ };
20
+ var client = new HttpClient(handler);
21
+ ```
22
+
23
+ **Correct (default validation):**
24
+
25
+ ```csharp
26
+ // Standard HttpClient validates by default
27
+ var client = new HttpClient();
28
+
29
+ // Or specific CA validation
30
+ var handler = new HttpClientHandler
31
+ {
32
+ ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) =>
33
+ {
34
+ if (errors == SslPolicyErrors.None) return true;
35
+ // Verify against pinned public key or internal CA
36
+ return cert.Thumbprint == EXPECTED_THUMBPRINT;
37
+ }
38
+ };
39
+ ```
40
+
41
+ **Tools:** Roslyn Analyzers, SonarQube
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: Invalidate Session On Logout
3
+ impact: MEDIUM
4
+ impactDescription: ensures logout actually terminates access
5
+ tags: session, logout, invalidation, security, csharp
6
+ ---
7
+
8
+ ## Invalidate Session On Logout
9
+
10
+ Ensure that logging out invalidates the session on the server side.
11
+
12
+ **Incorrect (client-side only):**
13
+
14
+ ```javascript
15
+ // Front-end removes cookie/token, but server token remains valid
16
+ localStorage.removeItem('token');
17
+ ```
18
+
19
+ **Correct (server-side invalidation):**
20
+
21
+ ```csharp
22
+ [HttpPost]
23
+ public async Task<IActionResult> Logout()
24
+ {
25
+ // Cookie Auth
26
+ await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
27
+
28
+ // JWT - Add current token to revocation list / blacklist (Redis/DB)
29
+ var token = await HttpContext.GetTokenAsync("access_token");
30
+ await _tokenBlacklistService.RevokeAsync(token);
31
+
32
+ return Ok();
33
+ }
34
+ ```
35
+
36
+ **Tools:** Identity Framework, Manual Review
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: Re-authenticate For Long Keys/Sessions
3
+ impact: CRITICAL
4
+ impactDescription: prevents indefinite access via stolen tokens
5
+ tags: session, authentication, token, expiry, security, csharp
6
+ ---
7
+
8
+ ## Re-authenticate For Long Keys/Sessions
9
+
10
+ Long-lived sessions allow attackers to maintain access indefinitely if they steal a token.
11
+
12
+ **Incorrect (never expiring tokens):**
13
+
14
+ ```csharp
15
+ var tokenDescriptor = new SecurityTokenDescriptor
16
+ {
17
+ Subject = new ClaimsIdentity(claims),
18
+ Expires = DateTime.UtcNow.AddYears(1), // Too long!
19
+ SigningCredentials = credentials
20
+ };
21
+ ```
22
+
23
+ **Correct (short lived access tokens + refresh tokens):**
24
+
25
+ ```csharp
26
+ // 1. Short Access Token (e.g. 15-30 mins)
27
+ var tokenDescriptor = new SecurityTokenDescriptor
28
+ {
29
+ Subject = new ClaimsIdentity(claims),
30
+ Expires = DateTime.UtcNow.AddMinutes(15),
31
+ SigningCredentials = credentials
32
+ };
33
+
34
+ // 2. Validate Security Stamp periodically for Cookie Auth
35
+ services.Configure<SecurityStampValidatorOptions>(options =>
36
+ {
37
+ // Check if user attributes (password/roles) changed every 30 mins
38
+ options.ValidationInterval = TimeSpan.FromMinutes(30);
39
+ });
40
+
41
+ // 3. Sliding Expiration for Cookies
42
+ // Resets expiration if user is active, but enforces absolute limit?
43
+ options.SlidingExpiration = true;
44
+ options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
45
+ ```
46
+
47
+ **Tools:** ASP.NET Identity, IdentityServer
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: Re-authenticate Before Critical Changes
3
+ impact: MEDIUM
4
+ impactDescription: prevents unauthorized critical operations
5
+ tags: authentication, critical, reauthentication, security, csharp
6
+ ---
7
+
8
+ ## Re-authenticate Before Critical Changes
9
+
10
+ Critical actions like changing passwords, emails, or 2FA settings should require re-entering the password or strict re-authentication.
11
+
12
+ **Incorrect (no verification):**
13
+
14
+ ```csharp
15
+ [HttpPost]
16
+ public async Task<IActionResult> ChangeEmail(string newEmail)
17
+ {
18
+ var user = await _userManager.GetUserAsync(User);
19
+ await _userManager.SetEmailAsync(user, newEmail); // Vulnerable if session hijacked
20
+ return Ok();
21
+ }
22
+ ```
23
+
24
+ **Correct (verify password):**
25
+
26
+ ```csharp
27
+ [HttpPost]
28
+ public async Task<IActionResult> ChangeEmail(ChangeEmailModel model)
29
+ {
30
+ var user = await _userManager.GetUserAsync(User);
31
+
32
+ // Check password again
33
+ var passwordCheck = await _userManager.CheckPasswordAsync(user, model.CurrentPassword);
34
+ if (!passwordCheck)
35
+ {
36
+ return Unauthorized("Invalid password");
37
+ }
38
+
39
+ // Proceed with change
40
+ await _userManager.SetEmailAsync(user, model.NewEmail);
41
+ return Ok();
42
+ }
43
+ ```
44
+
45
+ **Tools:** ASP.NET Identity, Manual Review
@@ -0,0 +1,48 @@
1
+ ---
2
+ title: Implement Brute-force Protection
3
+ impact: MEDIUM
4
+ impactDescription: prevents password guessing attacks
5
+ tags: brute-force, rate-limiting, authentication, security, csharp
6
+ ---
7
+
8
+ ## Implement Brute-force Protection
9
+
10
+ Prevent automated password guessing by implementing rate limiting or account lockout policies.
11
+
12
+ **Incorrect (no limit):**
13
+
14
+ ```csharp
15
+ [HttpPost]
16
+ public async Task<IActionResult> Login(LoginModel model)
17
+ {
18
+ var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);
19
+ // lockoutOnFailure is false = unlimited attempts
20
+ }
21
+ ```
22
+
23
+ **Correct (lockout enabled):**
24
+
25
+ ```csharp
26
+ // 1. Enable Lockout in Startup
27
+ services.AddDefaultIdentity<IdentityUser>(options =>
28
+ {
29
+ options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);
30
+ options.Lockout.MaxFailedAccessAttempts = 5;
31
+ options.Lockout.AllowedForNewUsers = true;
32
+ });
33
+
34
+ // 2. Use it in Login
35
+ [HttpPost]
36
+ public async Task<IActionResult> Login(LoginModel model)
37
+ {
38
+ // lockoutOnFailure: true
39
+ var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, lockoutOnFailure: true);
40
+
41
+ if (result.IsLockedOut)
42
+ {
43
+ return BadRequest("Account locked out");
44
+ }
45
+ }
46
+ ```
47
+
48
+ **Tools:** ASP.NET Identity, AspNetCoreRateLimit
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: Protect OAuth Code Flow Vs CSRF
3
+ impact: HIGH
4
+ impactDescription: prevents OAuth authorization code theft
5
+ tags: oauth, csrf, state, authorization, security, csharp
6
+ ---
7
+
8
+ ## Protect OAuth Code Flow Vs CSRF
9
+
10
+ OAuth flows must use the `state` parameter to prevent CSRF attacks. ASP.NET Core Authentication handlers do this by default, but custom implementations often miss it.
11
+
12
+ **Incorrect (manual implementation without state):**
13
+
14
+ ```csharp
15
+ public IActionResult LoginWithGoogle()
16
+ {
17
+ var url = $"https://accounts.google.com/o/oauth2/auth?client_id={ClientId}&redirect_uri={RedirectUri}";
18
+ return Redirect(url); // No state parameter!
19
+ }
20
+ ```
21
+
22
+ **Correct (using library or state):**
23
+
24
+ ```csharp
25
+ // Preferred: Use built-in libraries
26
+ services.AddAuthentication().AddGoogle(options =>
27
+ {
28
+ options.ClientId = "...";
29
+ options.ClientSecret = "...";
30
+ // Correlation Cookie & State handles CSRF automatically
31
+ });
32
+
33
+ // Manual implementation:
34
+ public IActionResult LoginWithGoogle()
35
+ {
36
+ var state = GenerateRandomState();
37
+ HttpContext.Session.SetString("oauth_state", state);
38
+
39
+ var url = $"https://...&state={state}";
40
+ return Redirect(url);
41
+ }
42
+
43
+ public IActionResult Callback(string code, string state)
44
+ {
45
+ if (state != HttpContext.Session.GetString("oauth_state"))
46
+ {
47
+ return BadRequest("Invalid state");
48
+ }
49
+ // ...
50
+ }
51
+ ```
52
+
53
+ **Tools:** ASP.NET Security Providers, Manual Review
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: Validate OAuth Redirect URIs Exactly
3
+ impact: CRITICAL
4
+ impactDescription: prevents OAuth redirect hijacking
5
+ tags: oauth, redirect, uri, validation, security, csharp
6
+ ---
7
+
8
+ ## Validate OAuth Redirect URIs Exactly
9
+
10
+ If you are implementing an Identity Provider, you must validate redirect URIs exactly.
11
+
12
+ **Incorrect (loose validation):**
13
+
14
+ ```csharp
15
+ if (redirectUri.StartsWith("https://myapp.com")) // Vulnerable to myapp.com.evil.com
16
+ {
17
+ return true;
18
+ }
19
+ ```
20
+
21
+ **Correct (exact match):**
22
+
23
+ ```csharp
24
+ var allowedUris = new List<string>
25
+ {
26
+ "https://myapp.com/callback",
27
+ "https://mobile.myapp.com/auth"
28
+ };
29
+
30
+ // Must match exactly
31
+ if (!allowedUris.Contains(redirectUri, StringComparer.OrdinalIgnoreCase))
32
+ {
33
+ return BadRequest("Invalid redirect_uri");
34
+ }
35
+ ```
36
+
37
+ **Tools:** IdentityServer, OpenIddict Configuration
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: Authentication Codes Must Expire Quickly
3
+ impact: MEDIUM
4
+ impactDescription: limits window for code interception attacks
5
+ tags: authentication, codes, expiry, otp, security, csharp
6
+ ---
7
+
8
+ ## Authentication Codes Must Expire Quickly
9
+
10
+ Authorization codes, OTPs, and email verification tokens must have short lifetimes.
11
+
12
+ **Incorrect (long expiry):**
13
+
14
+ ```csharp
15
+ // Generating a token valid for 24 hours
16
+ var token = GenerateToken();
17
+ _cache.Set(token, userId, TimeSpan.FromHours(24));
18
+ ```
19
+
20
+ **Correct (short expiry):**
21
+
22
+ ```csharp
23
+ // 5 minutes for OTP/Auth Codes
24
+ _cache.Set(token, userId, TimeSpan.FromMinutes(5));
25
+
26
+ // Identity config
27
+ services.Configure<DataProtectionTokenProviderOptions>(options =>
28
+ {
29
+ options.TokenLifespan = TimeSpan.FromMinutes(15); // For password reset / email confirm
30
+ });
31
+ ```
32
+
33
+ **Tools:** ASP.NET Identity Options, Manual Review
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: Reference Tokens 128-bit Entropy CSPRNG
3
+ impact: HIGH
4
+ impactDescription: prevents token brute-forcing
5
+ tags: tokens, entropy, csprng, session, security, csharp
6
+ ---
7
+
8
+ ## Reference Tokens 128-bit Entropy CSPRNG
9
+
10
+ Generating tokens (session IDs, API keys) must use high entropy.
11
+
12
+ **Incorrect (using Guid or Random):**
13
+
14
+ ```csharp
15
+ var token = Guid.NewGuid().ToString(); // Predictable generation logic, only 122 bits random?
16
+ var token2 = new Random().Next().ToString(); // Very weak
17
+ ```
18
+
19
+ **Correct (RNGCryptoServiceProvider / RandomNumberGenerator):**
20
+
21
+ ```csharp
22
+ using System.Security.Cryptography;
23
+
24
+ string GenerateToken(int length = 32)
25
+ {
26
+ var bytes = new byte[length];
27
+ RandomNumberGenerator.Fill(bytes);
28
+ return Convert.ToBase64String(bytes)
29
+ .Replace("+", "-").Replace("/", "_").Replace("=", ""); // Base64Url
30
+ }
31
+ ```
32
+
33
+ **Tools:** SonarQube