@brunosps00/dev-workflow 0.0.3 → 0.0.6

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 (221) hide show
  1. package/README.md +42 -42
  2. package/bin/dev-workflow.js +6 -4
  3. package/lib/constants.js +42 -40
  4. package/lib/init.js +66 -19
  5. package/package.json +1 -1
  6. package/scaffold/en/commands/{analyze-project.md → dw-analyze-project.md} +69 -40
  7. package/scaffold/en/commands/{brainstorm.md → dw-brainstorm.md} +31 -4
  8. package/scaffold/en/commands/{bugfix.md → dw-bugfix.md} +63 -19
  9. package/scaffold/en/commands/{code-review.md → dw-code-review.md} +38 -15
  10. package/scaffold/en/commands/{commit.md → dw-commit.md} +25 -0
  11. package/scaffold/en/commands/{create-prd.md → dw-create-prd.md} +24 -10
  12. package/scaffold/en/commands/{create-tasks.md → dw-create-tasks.md} +11 -4
  13. package/scaffold/en/commands/{create-techspec.md → dw-create-techspec.md} +38 -11
  14. package/scaffold/en/commands/{deep-research.md → dw-deep-research.md} +18 -17
  15. package/scaffold/en/commands/{fix-qa.md → dw-fix-qa.md} +20 -3
  16. package/scaffold/en/commands/dw-functional-doc.md +276 -0
  17. package/scaffold/en/commands/{generate-pr.md → dw-generate-pr.md} +20 -5
  18. package/scaffold/en/commands/dw-help.md +309 -0
  19. package/scaffold/en/commands/{refactoring-analysis.md → dw-refactoring-analysis.md} +50 -26
  20. package/scaffold/en/commands/{review-implementation.md → dw-review-implementation.md} +25 -6
  21. package/scaffold/en/commands/{run-plan.md → dw-run-plan.md} +21 -6
  22. package/scaffold/en/commands/{run-qa.md → dw-run-qa.md} +32 -13
  23. package/scaffold/en/commands/{run-task.md → dw-run-task.md} +17 -7
  24. package/scaffold/en/references/playwright-patterns.md +136 -0
  25. package/scaffold/en/references/refactoring-catalog.md +167 -0
  26. package/scaffold/en/templates/brainstorm-matrix.md +44 -0
  27. package/scaffold/en/templates/functional-doc/case-matrix.md +5 -0
  28. package/scaffold/en/templates/functional-doc/e2e-runbook.md +3 -0
  29. package/scaffold/en/templates/functional-doc/features.md +3 -0
  30. package/scaffold/en/templates/functional-doc/overview.md +21 -0
  31. package/scaffold/en/templates/functional-doc/playwright.spec.ts.tpl +19 -0
  32. package/scaffold/en/templates/pr-bugfix-template.md +28 -0
  33. package/scaffold/en/templates/qa-test-credentials.md +37 -0
  34. package/scaffold/en/templates/tasks-template.md +1 -1
  35. package/scaffold/en/templates/techspec-template.md +1 -1
  36. package/scaffold/pt-br/commands/{analyze-project.md → dw-analyze-project.md} +94 -44
  37. package/scaffold/pt-br/commands/{brainstorm.md → dw-brainstorm.md} +32 -5
  38. package/scaffold/pt-br/commands/{bugfix.md → dw-bugfix.md} +73 -16
  39. package/scaffold/pt-br/commands/{code-review.md → dw-code-review.md} +80 -17
  40. package/scaffold/pt-br/commands/{commit.md → dw-commit.md} +45 -1
  41. package/scaffold/pt-br/commands/{create-prd.md → dw-create-prd.md} +25 -10
  42. package/scaffold/pt-br/commands/{create-tasks.md → dw-create-tasks.md} +24 -17
  43. package/scaffold/pt-br/commands/{create-techspec.md → dw-create-techspec.md} +40 -13
  44. package/scaffold/pt-br/commands/{deep-research.md → dw-deep-research.md} +19 -11
  45. package/scaffold/pt-br/commands/{fix-qa.md → dw-fix-qa.md} +30 -1
  46. package/scaffold/pt-br/commands/dw-functional-doc.md +276 -0
  47. package/scaffold/pt-br/commands/{generate-pr.md → dw-generate-pr.md} +61 -6
  48. package/scaffold/pt-br/commands/dw-help.md +248 -0
  49. package/scaffold/pt-br/commands/{refactoring-analysis.md → dw-refactoring-analysis.md} +49 -25
  50. package/scaffold/pt-br/commands/{review-implementation.md → dw-review-implementation.md} +53 -5
  51. package/scaffold/pt-br/commands/{run-plan.md → dw-run-plan.md} +100 -12
  52. package/scaffold/pt-br/commands/{run-qa.md → dw-run-qa.md} +93 -18
  53. package/scaffold/pt-br/commands/{run-task.md → dw-run-task.md} +35 -10
  54. package/scaffold/pt-br/references/playwright-patterns.md +133 -0
  55. package/scaffold/pt-br/references/refactoring-catalog.md +166 -0
  56. package/scaffold/pt-br/templates/brainstorm-matrix.md +44 -0
  57. package/scaffold/pt-br/templates/functional-doc/case-matrix.md +5 -0
  58. package/scaffold/pt-br/templates/functional-doc/e2e-runbook.md +3 -0
  59. package/scaffold/pt-br/templates/functional-doc/features.md +3 -0
  60. package/scaffold/pt-br/templates/functional-doc/overview.md +21 -0
  61. package/scaffold/pt-br/templates/functional-doc/playwright.spec.ts.tpl +19 -0
  62. package/scaffold/pt-br/templates/pr-bugfix-template.md +28 -0
  63. package/scaffold/pt-br/templates/qa-test-credentials.md +37 -0
  64. package/scaffold/pt-br/templates/tasks-template.md +2 -2
  65. package/scaffold/pt-br/templates/techspec-template.md +1 -1
  66. package/scaffold/rules-readme.md +3 -3
  67. package/scaffold/scripts/functional-doc/generate-dossier.mjs +821 -0
  68. package/scaffold/scripts/functional-doc/run-playwright-flow.mjs +275 -0
  69. package/scaffold/skills/agent-browser/SKILL.md +750 -0
  70. package/scaffold/skills/agent-browser/references/authentication.md +303 -0
  71. package/scaffold/skills/agent-browser/references/commands.md +295 -0
  72. package/scaffold/skills/agent-browser/references/profiling.md +120 -0
  73. package/scaffold/skills/agent-browser/references/proxy-support.md +194 -0
  74. package/scaffold/skills/agent-browser/references/session-management.md +193 -0
  75. package/scaffold/skills/agent-browser/references/snapshot-refs.md +219 -0
  76. package/scaffold/skills/agent-browser/references/video-recording.md +173 -0
  77. package/scaffold/skills/agent-browser/templates/authenticated-session.sh +105 -0
  78. package/scaffold/skills/agent-browser/templates/capture-workflow.sh +69 -0
  79. package/scaffold/skills/agent-browser/templates/form-automation.sh +62 -0
  80. package/scaffold/skills/humanizer/README.md +143 -0
  81. package/scaffold/skills/humanizer/SKILL.md +488 -0
  82. package/scaffold/skills/humanizer/WARP.md +53 -0
  83. package/scaffold/skills/remotion-best-practices/SKILL.md +61 -0
  84. package/scaffold/skills/remotion-best-practices/rules/3d.md +86 -0
  85. package/scaffold/skills/remotion-best-practices/rules/animations.md +27 -0
  86. package/scaffold/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  87. package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  88. package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  89. package/scaffold/skills/remotion-best-practices/rules/assets.md +78 -0
  90. package/scaffold/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  91. package/scaffold/skills/remotion-best-practices/rules/audio.md +169 -0
  92. package/scaffold/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  93. package/scaffold/skills/remotion-best-practices/rules/can-decode.md +75 -0
  94. package/scaffold/skills/remotion-best-practices/rules/charts.md +120 -0
  95. package/scaffold/skills/remotion-best-practices/rules/compositions.md +154 -0
  96. package/scaffold/skills/remotion-best-practices/rules/display-captions.md +184 -0
  97. package/scaffold/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  98. package/scaffold/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  99. package/scaffold/skills/remotion-best-practices/rules/fonts.md +152 -0
  100. package/scaffold/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  101. package/scaffold/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  102. package/scaffold/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  103. package/scaffold/skills/remotion-best-practices/rules/gifs.md +141 -0
  104. package/scaffold/skills/remotion-best-practices/rules/images.md +134 -0
  105. package/scaffold/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  106. package/scaffold/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  107. package/scaffold/skills/remotion-best-practices/rules/lottie.md +70 -0
  108. package/scaffold/skills/remotion-best-practices/rules/maps.md +412 -0
  109. package/scaffold/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  110. package/scaffold/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  111. package/scaffold/skills/remotion-best-practices/rules/parameters.md +109 -0
  112. package/scaffold/skills/remotion-best-practices/rules/sequencing.md +118 -0
  113. package/scaffold/skills/remotion-best-practices/rules/sfx.md +26 -0
  114. package/scaffold/skills/remotion-best-practices/rules/subtitles.md +36 -0
  115. package/scaffold/skills/remotion-best-practices/rules/tailwind.md +11 -0
  116. package/scaffold/skills/remotion-best-practices/rules/text-animations.md +20 -0
  117. package/scaffold/skills/remotion-best-practices/rules/timing.md +179 -0
  118. package/scaffold/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  119. package/scaffold/skills/remotion-best-practices/rules/transitions.md +197 -0
  120. package/scaffold/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  121. package/scaffold/skills/remotion-best-practices/rules/trimming.md +51 -0
  122. package/scaffold/skills/remotion-best-practices/rules/videos.md +171 -0
  123. package/scaffold/skills/remotion-best-practices/rules/voiceover.md +99 -0
  124. package/scaffold/skills/security-review/LICENSE +22 -0
  125. package/scaffold/skills/security-review/SKILL.md +312 -0
  126. package/scaffold/skills/security-review/infrastructure/docker.md +432 -0
  127. package/scaffold/skills/security-review/languages/javascript.md +388 -0
  128. package/scaffold/skills/security-review/languages/python.md +363 -0
  129. package/scaffold/skills/security-review/references/api-security.md +519 -0
  130. package/scaffold/skills/security-review/references/authentication.md +353 -0
  131. package/scaffold/skills/security-review/references/authorization.md +372 -0
  132. package/scaffold/skills/security-review/references/business-logic.md +443 -0
  133. package/scaffold/skills/security-review/references/cryptography.md +329 -0
  134. package/scaffold/skills/security-review/references/csrf.md +398 -0
  135. package/scaffold/skills/security-review/references/data-protection.md +378 -0
  136. package/scaffold/skills/security-review/references/deserialization.md +410 -0
  137. package/scaffold/skills/security-review/references/error-handling.md +436 -0
  138. package/scaffold/skills/security-review/references/file-security.md +457 -0
  139. package/scaffold/skills/security-review/references/injection.md +259 -0
  140. package/scaffold/skills/security-review/references/logging.md +433 -0
  141. package/scaffold/skills/security-review/references/misconfiguration.md +435 -0
  142. package/scaffold/skills/security-review/references/modern-threats.md +475 -0
  143. package/scaffold/skills/security-review/references/ssrf.md +415 -0
  144. package/scaffold/skills/security-review/references/supply-chain.md +405 -0
  145. package/scaffold/skills/security-review/references/xss.md +336 -0
  146. package/scaffold/skills/vercel-react-best-practices/AGENTS.md +3648 -0
  147. package/scaffold/skills/vercel-react-best-practices/README.md +123 -0
  148. package/scaffold/skills/vercel-react-best-practices/SKILL.md +146 -0
  149. package/scaffold/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  150. package/scaffold/skills/vercel-react-best-practices/rules/_template.md +28 -0
  151. package/scaffold/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  152. package/scaffold/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  153. package/scaffold/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  154. package/scaffold/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  155. package/scaffold/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  156. package/scaffold/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  157. package/scaffold/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  158. package/scaffold/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  159. package/scaffold/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  160. package/scaffold/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  161. package/scaffold/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  162. package/scaffold/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  163. package/scaffold/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  164. package/scaffold/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  165. package/scaffold/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  166. package/scaffold/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  167. package/scaffold/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  168. package/scaffold/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  169. package/scaffold/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  170. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  171. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  172. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  173. package/scaffold/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  174. package/scaffold/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  175. package/scaffold/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  176. package/scaffold/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  177. package/scaffold/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  178. package/scaffold/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  179. package/scaffold/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  180. package/scaffold/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  181. package/scaffold/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  182. package/scaffold/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  183. package/scaffold/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  184. package/scaffold/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  185. package/scaffold/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  186. package/scaffold/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  187. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  188. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  189. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  190. package/scaffold/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  191. package/scaffold/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  192. package/scaffold/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  193. package/scaffold/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  194. package/scaffold/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  195. package/scaffold/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  196. package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  197. package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  198. package/scaffold/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  199. package/scaffold/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  200. package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  201. package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  202. package/scaffold/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  203. package/scaffold/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  204. package/scaffold/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  205. package/scaffold/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  206. package/scaffold/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  207. package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  208. package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  209. package/scaffold/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  210. package/scaffold/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  211. package/scaffold/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  212. package/scaffold/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  213. package/scaffold/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  214. package/scaffold/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  215. package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  216. package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  217. package/scaffold/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  218. package/scaffold/skills/webapp-testing/SKILL.md +133 -0
  219. package/scaffold/skills/webapp-testing/assets/test-helper.js +56 -0
  220. package/scaffold/en/commands/help.md +0 -289
  221. package/scaffold/pt-br/commands/help.md +0 -226
@@ -0,0 +1,336 @@
1
+ # Cross-Site Scripting (XSS) Prevention Reference
2
+
3
+ ## Overview
4
+
5
+ XSS occurs when applications include untrusted data in web pages without proper validation or escaping. Attackers can execute scripts in victims' browsers to hijack sessions, deface websites, or redirect users to malicious sites.
6
+
7
+ ## XSS Types
8
+
9
+ | Type | Description | Example |
10
+ |------|-------------|---------|
11
+ | **Reflected** | Malicious script from current HTTP request | URL parameter rendered in response |
12
+ | **Stored** | Malicious script stored in target server | Comment field saved and displayed |
13
+ | **DOM-based** | Vulnerability in client-side code | JavaScript reads URL and writes to DOM |
14
+
15
+ ## Output Encoding by Context
16
+
17
+ ### HTML Body Context
18
+
19
+ ```javascript
20
+ // VULNERABLE: innerHTML with user data
21
+ element.innerHTML = userInput;
22
+
23
+ // SAFE: Use textContent
24
+ element.textContent = userInput;
25
+
26
+ // SAFE: Use createTextNode
27
+ document.createTextNode(userInput);
28
+ ```
29
+
30
+ **HTML Entity Encoding**
31
+ | Character | Encoding |
32
+ |-----------|----------|
33
+ | `<` | `&lt;` |
34
+ | `>` | `&gt;` |
35
+ | `&` | `&amp;` |
36
+ | `"` | `&quot;` |
37
+ | `'` | `&#x27;` |
38
+
39
+ ### HTML Attribute Context
40
+
41
+ ```html
42
+ <!-- VULNERABLE: Unquoted attribute -->
43
+ <input value=${userInput}>
44
+
45
+ <!-- VULNERABLE: Event handler with user data -->
46
+ <button onclick="doSomething('${userInput}')">
47
+
48
+ <!-- SAFE: Quoted attribute with encoding -->
49
+ <input value="${htmlEncode(userInput)}">
50
+ ```
51
+
52
+ **Rules:**
53
+ - Always quote attribute values
54
+ - Never place user input in event handlers (`onclick`, `onerror`, etc.)
55
+ - Use `setAttribute()` which auto-encodes
56
+
57
+ ### JavaScript Context
58
+
59
+ ```javascript
60
+ // VULNERABLE: eval with user input
61
+ eval(userInput);
62
+
63
+ // VULNERABLE: setTimeout with string
64
+ setTimeout("doSomething('" + userInput + "')", 1000);
65
+
66
+ // VULNERABLE: Function constructor
67
+ new Function("return " + userInput)();
68
+
69
+ // SAFE: JSON encoding for data
70
+ const data = JSON.parse(jsonString);
71
+
72
+ // SAFE: setTimeout with function
73
+ setTimeout(() => doSomething(userInput), 1000);
74
+ ```
75
+
76
+ **Safe JavaScript Locations** (with proper encoding):
77
+ - Inside quoted string values only
78
+ - Never directly in script blocks
79
+
80
+ ### URL Context
81
+
82
+ ```javascript
83
+ // VULNERABLE: User input in href
84
+ element.href = userInput;
85
+
86
+ // VULNERABLE: javascript: URL scheme
87
+ <a href="javascript:${userInput}">
88
+
89
+ // SAFE: Validate URL scheme
90
+ const url = new URL(userInput);
91
+ if (url.protocol === 'https:' || url.protocol === 'http:') {
92
+ element.href = url.toString();
93
+ }
94
+
95
+ // SAFE: Encode URL parameters
96
+ const encoded = encodeURIComponent(userInput);
97
+ ```
98
+
99
+ ### CSS Context
100
+
101
+ ```css
102
+ /* VULNERABLE: User input in style */
103
+ .element { background: url(${userInput}); }
104
+
105
+ /* VULNERABLE: Expression in CSS */
106
+ .element { behavior: expression(${userInput}); }
107
+ ```
108
+
109
+ **Rules:**
110
+ - Place user data only in CSS property values
111
+ - Never allow user input in selectors or URLs
112
+
113
+ ---
114
+
115
+ ## Safe DOM Sinks
116
+
117
+ **Use These:**
118
+ ```javascript
119
+ elem.textContent = variable;
120
+ elem.insertAdjacentText('beforeend', variable);
121
+ elem.className = variable; // for class names
122
+ elem.setAttribute('data-value', variable);
123
+ formField.value = variable;
124
+ document.createTextNode(variable);
125
+ ```
126
+
127
+ **Avoid These:**
128
+ ```javascript
129
+ elem.innerHTML = variable; // XSS
130
+ elem.outerHTML = variable; // XSS
131
+ document.write(variable); // XSS
132
+ document.writeln(variable); // XSS
133
+ eval(variable); // Code execution
134
+ setTimeout(variable); // If string argument
135
+ setInterval(variable); // If string argument
136
+ new Function(variable); // Code execution
137
+ elem.insertAdjacentHTML(); // XSS
138
+ elem.onevent = variable; // Event handler
139
+ ```
140
+
141
+ ---
142
+
143
+ ## Framework-Specific Considerations
144
+
145
+ ### React
146
+
147
+ ```jsx
148
+ // SAFE: Auto-escaped by default
149
+ <div>{userInput}</div>
150
+
151
+ // VULNERABLE: dangerouslySetInnerHTML
152
+ <div dangerouslySetInnerHTML={{__html: userInput}} />
153
+
154
+ // SAFE: Sanitize before using dangerouslySetInnerHTML
155
+ import DOMPurify from 'dompurify';
156
+ <div dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(userInput)}} />
157
+ ```
158
+
159
+ ### Angular
160
+
161
+ ```typescript
162
+ // SAFE: Auto-escaped by default
163
+ <div>{{ userInput }}</div>
164
+
165
+ // VULNERABLE: bypassSecurityTrust*
166
+ this.sanitizer.bypassSecurityTrustHtml(userInput);
167
+
168
+ // Use bypassSecurityTrust* only with sanitized input
169
+ ```
170
+
171
+ ### Vue
172
+
173
+ ```html
174
+ <!-- SAFE: Auto-escaped -->
175
+ <div>{{ userInput }}</div>
176
+
177
+ <!-- VULNERABLE: v-html directive -->
178
+ <div v-html="userInput"></div>
179
+
180
+ <!-- SAFE: Sanitize first -->
181
+ <div v-html="sanitizedInput"></div>
182
+ ```
183
+
184
+ ### Django/Jinja2
185
+
186
+ ```django
187
+ <!-- SAFE: Auto-escaped by default -->
188
+ {{ user_input }}
189
+
190
+ <!-- VULNERABLE: |safe filter -->
191
+ {{ user_input|safe }}
192
+
193
+ <!-- VULNERABLE: {% autoescape off %} -->
194
+ {% autoescape off %}
195
+ {{ user_input }}
196
+ {% endautoescape %}
197
+ ```
198
+
199
+ ---
200
+
201
+ ## HTML Sanitization
202
+
203
+ When users must submit HTML (rich text editors), use a sanitization library.
204
+
205
+ ```javascript
206
+ // Recommended: DOMPurify
207
+ import DOMPurify from 'dompurify';
208
+
209
+ const clean = DOMPurify.sanitize(dirty);
210
+
211
+ // With configuration
212
+ const clean = DOMPurify.sanitize(dirty, {
213
+ ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a'],
214
+ ALLOWED_ATTR: ['href']
215
+ });
216
+ ```
217
+
218
+ **Key Points:**
219
+ - Keep sanitization libraries updated
220
+ - Configure allowed tags/attributes based on needs
221
+ - Sanitize on output, not just input
222
+
223
+ ---
224
+
225
+ ## Content Security Policy (CSP)
226
+
227
+ CSP provides defense-in-depth but should not be the primary XSS defense.
228
+
229
+ ### Strict CSP (Recommended)
230
+
231
+ ```
232
+ Content-Security-Policy:
233
+ default-src 'self';
234
+ script-src 'nonce-{RANDOM}' 'strict-dynamic';
235
+ object-src 'none';
236
+ base-uri 'none';
237
+ ```
238
+
239
+ ### Nonce-Based Approach
240
+
241
+ ```html
242
+ <!-- Server generates unique nonce per request -->
243
+ <script nonce="r4nd0m123">
244
+ // Allowed script
245
+ </script>
246
+
247
+ <script>
248
+ // Blocked - no nonce
249
+ </script>
250
+ ```
251
+
252
+ ### Hash-Based Approach
253
+
254
+ ```
255
+ Content-Security-Policy: script-src 'sha256-base64hash...'
256
+ ```
257
+
258
+ ---
259
+
260
+ ## DOM-based XSS Prevention
261
+
262
+ ### Dangerous Sources
263
+
264
+ ```javascript
265
+ // Attacker-controllable sources
266
+ location.hash
267
+ location.search
268
+ document.referrer
269
+ window.name
270
+ postMessage data
271
+ ```
272
+
273
+ ### Prevention
274
+
275
+ ```javascript
276
+ // VULNERABLE: Direct use of source in sink
277
+ element.innerHTML = location.hash.slice(1);
278
+
279
+ // SAFE: Validate and encode
280
+ const hash = location.hash.slice(1);
281
+ if (/^[a-zA-Z0-9-]+$/.test(hash)) {
282
+ element.textContent = hash;
283
+ }
284
+ ```
285
+
286
+ ---
287
+
288
+ ## Key Grep Patterns for Detection
289
+
290
+ ```bash
291
+ # Dangerous DOM sinks
292
+ grep -rn "innerHTML\|outerHTML\|document\.write" --include="*.js" --include="*.jsx"
293
+ grep -rn "dangerouslySetInnerHTML" --include="*.jsx" --include="*.tsx"
294
+ grep -rn "v-html" --include="*.vue"
295
+ grep -rn "\|safe\|autoescape off" --include="*.html" --include="*.jinja"
296
+
297
+ # Dangerous JavaScript
298
+ grep -rn "eval(\|Function(\|setTimeout.*string\|setInterval.*string" --include="*.js"
299
+
300
+ # Framework bypasses
301
+ grep -rn "bypassSecurityTrust" --include="*.ts"
302
+ grep -rn "mark_safe\|SafeString" --include="*.py"
303
+ ```
304
+
305
+ ---
306
+
307
+ ## Testing Payloads
308
+
309
+ **Basic:**
310
+ ```
311
+ <script>alert('XSS')</script>
312
+ <img src=x onerror=alert('XSS')>
313
+ <svg onload=alert('XSS')>
314
+ ```
315
+
316
+ **Attribute Escape:**
317
+ ```
318
+ " onmouseover="alert('XSS')
319
+ ' onclick='alert("XSS")
320
+ ```
321
+
322
+ **JavaScript Context:**
323
+ ```
324
+ ';alert('XSS')//
325
+ \';alert(\'XSS\')//
326
+ </script><script>alert('XSS')</script>
327
+ ```
328
+
329
+ ---
330
+
331
+ ## References
332
+
333
+ - [OWASP XSS Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html)
334
+ - [OWASP DOM-based XSS Prevention](https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html)
335
+ - [OWASP CSP Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)
336
+ - [CWE-79: Cross-site Scripting](https://cwe.mitre.org/data/definitions/79.html)