@brunosps00/dev-workflow 0.0.5 → 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 (164) hide show
  1. package/bin/dev-workflow.js +6 -4
  2. package/lib/init.js +28 -11
  3. package/package.json +1 -1
  4. package/scaffold/pt-br/commands/dw-analyze-project.md +3 -3
  5. package/scaffold/pt-br/commands/dw-bugfix.md +6 -6
  6. package/scaffold/pt-br/commands/dw-code-review.md +2 -2
  7. package/scaffold/pt-br/commands/dw-create-tasks.md +4 -4
  8. package/scaffold/pt-br/commands/dw-generate-pr.md +3 -3
  9. package/scaffold/pt-br/commands/dw-help.md +50 -50
  10. package/scaffold/pt-br/commands/dw-review-implementation.md +3 -3
  11. package/scaffold/pt-br/commands/dw-run-plan.md +8 -8
  12. package/scaffold/pt-br/commands/dw-run-task.md +3 -3
  13. package/scaffold/pt-br/templates/tasks-template.md +2 -2
  14. package/scaffold/skills/agent-browser/SKILL.md +750 -0
  15. package/scaffold/skills/agent-browser/references/authentication.md +303 -0
  16. package/scaffold/skills/agent-browser/references/commands.md +295 -0
  17. package/scaffold/skills/agent-browser/references/profiling.md +120 -0
  18. package/scaffold/skills/agent-browser/references/proxy-support.md +194 -0
  19. package/scaffold/skills/agent-browser/references/session-management.md +193 -0
  20. package/scaffold/skills/agent-browser/references/snapshot-refs.md +219 -0
  21. package/scaffold/skills/agent-browser/references/video-recording.md +173 -0
  22. package/scaffold/skills/agent-browser/templates/authenticated-session.sh +105 -0
  23. package/scaffold/skills/agent-browser/templates/capture-workflow.sh +69 -0
  24. package/scaffold/skills/agent-browser/templates/form-automation.sh +62 -0
  25. package/scaffold/skills/humanizer/README.md +143 -0
  26. package/scaffold/skills/humanizer/SKILL.md +488 -0
  27. package/scaffold/skills/humanizer/WARP.md +53 -0
  28. package/scaffold/skills/remotion-best-practices/SKILL.md +61 -0
  29. package/scaffold/skills/remotion-best-practices/rules/3d.md +86 -0
  30. package/scaffold/skills/remotion-best-practices/rules/animations.md +27 -0
  31. package/scaffold/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  32. package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  33. package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  34. package/scaffold/skills/remotion-best-practices/rules/assets.md +78 -0
  35. package/scaffold/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  36. package/scaffold/skills/remotion-best-practices/rules/audio.md +169 -0
  37. package/scaffold/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  38. package/scaffold/skills/remotion-best-practices/rules/can-decode.md +75 -0
  39. package/scaffold/skills/remotion-best-practices/rules/charts.md +120 -0
  40. package/scaffold/skills/remotion-best-practices/rules/compositions.md +154 -0
  41. package/scaffold/skills/remotion-best-practices/rules/display-captions.md +184 -0
  42. package/scaffold/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  43. package/scaffold/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  44. package/scaffold/skills/remotion-best-practices/rules/fonts.md +152 -0
  45. package/scaffold/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  46. package/scaffold/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  47. package/scaffold/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  48. package/scaffold/skills/remotion-best-practices/rules/gifs.md +141 -0
  49. package/scaffold/skills/remotion-best-practices/rules/images.md +134 -0
  50. package/scaffold/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  51. package/scaffold/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  52. package/scaffold/skills/remotion-best-practices/rules/lottie.md +70 -0
  53. package/scaffold/skills/remotion-best-practices/rules/maps.md +412 -0
  54. package/scaffold/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  55. package/scaffold/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  56. package/scaffold/skills/remotion-best-practices/rules/parameters.md +109 -0
  57. package/scaffold/skills/remotion-best-practices/rules/sequencing.md +118 -0
  58. package/scaffold/skills/remotion-best-practices/rules/sfx.md +26 -0
  59. package/scaffold/skills/remotion-best-practices/rules/subtitles.md +36 -0
  60. package/scaffold/skills/remotion-best-practices/rules/tailwind.md +11 -0
  61. package/scaffold/skills/remotion-best-practices/rules/text-animations.md +20 -0
  62. package/scaffold/skills/remotion-best-practices/rules/timing.md +179 -0
  63. package/scaffold/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  64. package/scaffold/skills/remotion-best-practices/rules/transitions.md +197 -0
  65. package/scaffold/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  66. package/scaffold/skills/remotion-best-practices/rules/trimming.md +51 -0
  67. package/scaffold/skills/remotion-best-practices/rules/videos.md +171 -0
  68. package/scaffold/skills/remotion-best-practices/rules/voiceover.md +99 -0
  69. package/scaffold/skills/security-review/LICENSE +22 -0
  70. package/scaffold/skills/security-review/SKILL.md +312 -0
  71. package/scaffold/skills/security-review/infrastructure/docker.md +432 -0
  72. package/scaffold/skills/security-review/languages/javascript.md +388 -0
  73. package/scaffold/skills/security-review/languages/python.md +363 -0
  74. package/scaffold/skills/security-review/references/api-security.md +519 -0
  75. package/scaffold/skills/security-review/references/authentication.md +353 -0
  76. package/scaffold/skills/security-review/references/authorization.md +372 -0
  77. package/scaffold/skills/security-review/references/business-logic.md +443 -0
  78. package/scaffold/skills/security-review/references/cryptography.md +329 -0
  79. package/scaffold/skills/security-review/references/csrf.md +398 -0
  80. package/scaffold/skills/security-review/references/data-protection.md +378 -0
  81. package/scaffold/skills/security-review/references/deserialization.md +410 -0
  82. package/scaffold/skills/security-review/references/error-handling.md +436 -0
  83. package/scaffold/skills/security-review/references/file-security.md +457 -0
  84. package/scaffold/skills/security-review/references/injection.md +259 -0
  85. package/scaffold/skills/security-review/references/logging.md +433 -0
  86. package/scaffold/skills/security-review/references/misconfiguration.md +435 -0
  87. package/scaffold/skills/security-review/references/modern-threats.md +475 -0
  88. package/scaffold/skills/security-review/references/ssrf.md +415 -0
  89. package/scaffold/skills/security-review/references/supply-chain.md +405 -0
  90. package/scaffold/skills/security-review/references/xss.md +336 -0
  91. package/scaffold/skills/vercel-react-best-practices/AGENTS.md +3648 -0
  92. package/scaffold/skills/vercel-react-best-practices/README.md +123 -0
  93. package/scaffold/skills/vercel-react-best-practices/SKILL.md +146 -0
  94. package/scaffold/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  95. package/scaffold/skills/vercel-react-best-practices/rules/_template.md +28 -0
  96. package/scaffold/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  97. package/scaffold/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  98. package/scaffold/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  99. package/scaffold/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  100. package/scaffold/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  101. package/scaffold/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  102. package/scaffold/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  103. package/scaffold/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  104. package/scaffold/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  105. package/scaffold/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  106. package/scaffold/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  107. package/scaffold/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  108. package/scaffold/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  109. package/scaffold/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  110. package/scaffold/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  111. package/scaffold/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  112. package/scaffold/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  113. package/scaffold/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  114. package/scaffold/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  115. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  116. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  117. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  118. package/scaffold/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  119. package/scaffold/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  120. package/scaffold/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  121. package/scaffold/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  122. package/scaffold/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  123. package/scaffold/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  124. package/scaffold/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  125. package/scaffold/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  126. package/scaffold/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  127. package/scaffold/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  128. package/scaffold/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  129. package/scaffold/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  130. package/scaffold/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  131. package/scaffold/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  132. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  133. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  134. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  135. package/scaffold/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  136. package/scaffold/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  137. package/scaffold/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  138. package/scaffold/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  139. package/scaffold/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  140. package/scaffold/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  141. package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  142. package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  143. package/scaffold/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  144. package/scaffold/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  145. package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  146. package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  147. package/scaffold/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  148. package/scaffold/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  149. package/scaffold/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  150. package/scaffold/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  151. package/scaffold/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  152. package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  153. package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  154. package/scaffold/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  155. package/scaffold/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  156. package/scaffold/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  157. package/scaffold/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  158. package/scaffold/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  159. package/scaffold/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  160. package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  161. package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  162. package/scaffold/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  163. package/scaffold/skills/webapp-testing/SKILL.md +133 -0
  164. package/scaffold/skills/webapp-testing/assets/test-helper.js +56 -0
@@ -0,0 +1,432 @@
1
+ # Docker Security Reference
2
+
3
+ ## Overview
4
+
5
+ Container security involves the Dockerfile, image composition, runtime configuration, and orchestration. Misconfigurations can lead to container escapes, privilege escalation, or exposure of sensitive data.
6
+
7
+ ---
8
+
9
+ ## Dockerfile Security
10
+
11
+ ### Running as Root
12
+
13
+ ```dockerfile
14
+ # VULNERABLE: Running as root (default)
15
+ FROM node:18
16
+ COPY . /app
17
+ CMD ["node", "app.js"] # Runs as root
18
+
19
+ # SAFE: Non-root user
20
+ FROM node:18
21
+ RUN groupadd -r appgroup && useradd -r -g appgroup appuser
22
+ WORKDIR /app
23
+ COPY --chown=appuser:appgroup . .
24
+ USER appuser
25
+ CMD ["node", "app.js"]
26
+
27
+ # SAFE: Using numeric UID (more portable)
28
+ USER 1000:1000
29
+ ```
30
+
31
+ ### Base Image Issues
32
+
33
+ ```dockerfile
34
+ # VULNERABLE: Using latest tag (unpredictable)
35
+ FROM node:latest
36
+ FROM ubuntu:latest
37
+
38
+ # VULNERABLE: Using untrusted/unverified base image
39
+ FROM randomuser/myimage
40
+
41
+ # SAFE: Pinned versions with digest
42
+ FROM node:18.19.0-alpine@sha256:abc123...
43
+ FROM python:3.11.7-slim-bookworm
44
+
45
+ # SAFE: Official images from verified publishers
46
+ FROM docker.io/library/node:18.19.0-alpine
47
+ ```
48
+
49
+ ### Sensitive Data in Images
50
+
51
+ ```dockerfile
52
+ # VULNERABLE: Secrets in build args visible in history
53
+ ARG DB_PASSWORD
54
+ RUN echo $DB_PASSWORD > /config
55
+
56
+ # VULNERABLE: Copying secrets into image
57
+ COPY .env /app/.env
58
+ COPY secrets.json /app/
59
+ COPY id_rsa /root/.ssh/
60
+
61
+ # VULNERABLE: Secrets in environment variables
62
+ ENV API_KEY=sk-12345
63
+ ENV DB_PASSWORD=mysecret
64
+
65
+ # SAFE: Mount secrets at runtime
66
+ # docker run -v /secrets:/secrets:ro myimage
67
+ # Or use Docker secrets in Swarm/K8s
68
+ ```
69
+
70
+ ### Build-Time Secrets
71
+
72
+ ```dockerfile
73
+ # SAFE: Multi-stage build to exclude secrets
74
+ FROM node:18 AS builder
75
+ # Use build-time secret (Docker BuildKit)
76
+ RUN --mount=type=secret,id=npm_token \
77
+ NPM_TOKEN=$(cat /run/secrets/npm_token) npm install
78
+
79
+ FROM node:18-alpine
80
+ COPY --from=builder /app/node_modules /app/node_modules
81
+ # Secret not in final image
82
+
83
+ # Build with: docker build --secret id=npm_token,src=.npmrc .
84
+ ```
85
+
86
+ ### Package Installation
87
+
88
+ ```dockerfile
89
+ # VULNERABLE: Not cleaning up package manager cache
90
+ RUN apt-get update && apt-get install -y curl wget
91
+ # Leaves cache, increases image size and attack surface
92
+
93
+ # VULNERABLE: Installing unnecessary packages
94
+ RUN apt-get install -y vim nano curl wget git ssh
95
+
96
+ # SAFE: Minimal installation with cleanup
97
+ RUN apt-get update && \
98
+ apt-get install -y --no-install-recommends curl && \
99
+ rm -rf /var/lib/apt/lists/*
100
+
101
+ # SAFE: Using minimal base images
102
+ FROM alpine:3.19
103
+ FROM gcr.io/distroless/nodejs18
104
+ FROM scratch # Empty base image
105
+ ```
106
+
107
+ ### COPY vs ADD
108
+
109
+ ```dockerfile
110
+ # VULNERABLE: ADD can auto-extract and fetch URLs
111
+ ADD https://example.com/file.tar.gz /app/ # Downloads from URL
112
+ ADD archive.tar.gz /app/ # Auto-extracts
113
+
114
+ # SAFE: COPY is more explicit
115
+ COPY archive.tar.gz /app/
116
+ RUN tar -xzf /app/archive.tar.gz && rm /app/archive.tar.gz
117
+ ```
118
+
119
+ ### Exposed Ports
120
+
121
+ ```dockerfile
122
+ # CHECK: Are all exposed ports necessary?
123
+ EXPOSE 22 # FLAG: SSH in container usually unnecessary
124
+ EXPOSE 3306 # FLAG: Database port exposed
125
+ EXPOSE 80 443 8080 9090 5000 # CHECK: Multiple ports
126
+
127
+ # SAFE: Only expose what's needed
128
+ EXPOSE 8080
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Image Scanning
134
+
135
+ ### Vulnerability Patterns
136
+
137
+ ```bash
138
+ # Scan for vulnerabilities
139
+ docker scan myimage
140
+ trivy image myimage
141
+ grype myimage
142
+
143
+ # Check for secrets in image
144
+ trufflehog docker --image myimage
145
+ # Or manually inspect layers
146
+ docker history --no-trunc myimage
147
+ ```
148
+
149
+ ### High-Risk Packages
150
+
151
+ ```dockerfile
152
+ # FLAG: Packages that increase attack surface
153
+ RUN apt-get install -y \
154
+ openssh-server \ # SSH access
155
+ sudo \ # Privilege escalation
156
+ netcat \ # Network tools
157
+ nmap \ # Network scanning
158
+ gcc make \ # Compilers (should be in build stage only)
159
+ python3-pip # Package managers (install deps, then remove)
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Runtime Security
165
+
166
+ ### Privileged Mode
167
+
168
+ ```bash
169
+ # VULNERABLE: Running privileged (full host access)
170
+ docker run --privileged myimage
171
+
172
+ # VULNERABLE: Dangerous capabilities
173
+ docker run --cap-add=ALL myimage
174
+ docker run --cap-add=SYS_ADMIN myimage
175
+ docker run --cap-add=NET_ADMIN myimage
176
+
177
+ # SAFE: Drop all capabilities, add only needed
178
+ docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myimage
179
+
180
+ # SAFE: Read-only root filesystem
181
+ docker run --read-only myimage
182
+
183
+ # SAFE: No new privileges
184
+ docker run --security-opt=no-new-privileges myimage
185
+ ```
186
+
187
+ ### Volume Mounts
188
+
189
+ ```bash
190
+ # VULNERABLE: Mounting sensitive host paths
191
+ docker run -v /:/host myimage # Entire host filesystem
192
+ docker run -v /etc:/etc myimage # Host config files
193
+ docker run -v /var/run/docker.sock:/var/run/docker.sock # Docker socket
194
+
195
+ # VULNERABLE: Writable mounts of sensitive paths
196
+ docker run -v /etc/passwd:/etc/passwd myimage
197
+
198
+ # SAFE: Specific paths, read-only where possible
199
+ docker run -v /app/data:/data:ro myimage
200
+ docker run -v myvolume:/app/data myimage # Named volume
201
+ ```
202
+
203
+ ### Docker Socket Access
204
+
205
+ ```bash
206
+ # CRITICAL: Docker socket mount = root on host
207
+ docker run -v /var/run/docker.sock:/var/run/docker.sock myimage
208
+ # Container can create privileged containers, access host
209
+
210
+ # If required, use read-only and restrict with authz plugin
211
+ # Or use Docker API proxy with limited permissions
212
+ ```
213
+
214
+ ### Network Security
215
+
216
+ ```bash
217
+ # VULNERABLE: Host network mode
218
+ docker run --network=host myimage # No network isolation
219
+
220
+ # SAFE: User-defined networks with isolation
221
+ docker network create --internal internal-net # No external access
222
+ docker run --network=internal-net myimage
223
+
224
+ # SAFE: Restrict inter-container communication
225
+ docker network create --driver=bridge --opt com.docker.network.bridge.enable_icc=false isolated
226
+ ```
227
+
228
+ ### Resource Limits
229
+
230
+ ```bash
231
+ # VULNERABLE: No resource limits (DoS risk)
232
+ docker run myimage
233
+
234
+ # SAFE: Set memory and CPU limits
235
+ docker run --memory=512m --cpus=1 myimage
236
+
237
+ # SAFE: Limit processes
238
+ docker run --pids-limit=100 myimage
239
+ ```
240
+
241
+ ---
242
+
243
+ ## Docker Compose Security
244
+
245
+ ### Secrets Management
246
+
247
+ ```yaml
248
+ # VULNERABLE: Secrets in environment
249
+ services:
250
+ app:
251
+ environment:
252
+ - DB_PASSWORD=mysecret
253
+ - API_KEY=sk-12345
254
+
255
+ # SAFE: Use secrets
256
+ services:
257
+ app:
258
+ secrets:
259
+ - db_password
260
+ environment:
261
+ - DB_PASSWORD_FILE=/run/secrets/db_password
262
+
263
+ secrets:
264
+ db_password:
265
+ external: true # Or file: ./secrets/db_password
266
+ ```
267
+
268
+ ### Privilege Restrictions
269
+
270
+ ```yaml
271
+ # SAFE: Security options in compose
272
+ services:
273
+ app:
274
+ image: myimage
275
+ user: "1000:1000"
276
+ read_only: true
277
+ security_opt:
278
+ - no-new-privileges:true
279
+ cap_drop:
280
+ - ALL
281
+ cap_add:
282
+ - NET_BIND_SERVICE
283
+ tmpfs:
284
+ - /tmp
285
+ deploy:
286
+ resources:
287
+ limits:
288
+ memory: 512M
289
+ cpus: '1'
290
+ ```
291
+
292
+ ### Network Isolation
293
+
294
+ ```yaml
295
+ # SAFE: Internal networks for backend services
296
+ services:
297
+ frontend:
298
+ networks:
299
+ - public
300
+ - internal
301
+
302
+ backend:
303
+ networks:
304
+ - internal # Not accessible from outside
305
+
306
+ database:
307
+ networks:
308
+ - internal
309
+
310
+ networks:
311
+ public:
312
+ internal:
313
+ internal: true # No external access
314
+ ```
315
+
316
+ ---
317
+
318
+ ## .dockerignore
319
+
320
+ ### Required Exclusions
321
+
322
+ ```dockerignore
323
+ # SAFE: Exclude sensitive files
324
+ .env
325
+ .env.*
326
+ *.pem
327
+ *.key
328
+ id_rsa*
329
+ secrets/
330
+ credentials/
331
+ .git/
332
+ .gitignore
333
+ .dockerignore
334
+ Dockerfile
335
+ docker-compose*.yml
336
+ *.log
337
+ node_modules/
338
+ __pycache__/
339
+ .pytest_cache/
340
+ coverage/
341
+ .nyc_output/
342
+ ```
343
+
344
+ ### Missing .dockerignore
345
+
346
+ ```bash
347
+ # FLAG: No .dockerignore may copy secrets into image
348
+ # Check if .env, keys, or credentials are copied
349
+ ```
350
+
351
+ ---
352
+
353
+ ## Registry Security
354
+
355
+ ### Image Pull Policy
356
+
357
+ ```yaml
358
+ # VULNERABLE: Always pulling latest
359
+ image: myregistry/myimage:latest
360
+
361
+ # VULNERABLE: No digest verification
362
+ image: myregistry/myimage:1.0
363
+
364
+ # SAFE: Pinned with digest
365
+ image: myregistry/myimage@sha256:abc123...
366
+ ```
367
+
368
+ ### Private Registry Auth
369
+
370
+ ```bash
371
+ # VULNERABLE: Credentials in plain text
372
+ docker login -u user -p password registry.example.com
373
+
374
+ # SAFE: Use credential helpers
375
+ # ~/.docker/config.json
376
+ {
377
+ "credHelpers": {
378
+ "gcr.io": "gcloud",
379
+ "*.dkr.ecr.*.amazonaws.com": "ecr-login"
380
+ }
381
+ }
382
+ ```
383
+
384
+ ---
385
+
386
+ ## Grep Patterns for Dockerfiles
387
+
388
+ ```bash
389
+ # Running as root
390
+ grep -rn "^USER" Dockerfile || echo "No USER directive - runs as root"
391
+
392
+ # Secrets in environment
393
+ grep -rn "^ENV.*PASSWORD\|^ENV.*SECRET\|^ENV.*KEY\|^ENV.*TOKEN" Dockerfile
394
+
395
+ # Secrets in build args
396
+ grep -rn "^ARG.*PASSWORD\|^ARG.*SECRET\|^ARG.*KEY" Dockerfile
397
+
398
+ # Latest tags
399
+ grep -rn "FROM.*:latest\|FROM.*@" Dockerfile | grep -v "@sha256"
400
+
401
+ # Privileged instructions
402
+ grep -rn "^ADD\|EXPOSE 22\|apt-get install.*ssh" Dockerfile
403
+
404
+ # Missing cleanup
405
+ grep -rn "apt-get install" Dockerfile | grep -v "rm -rf"
406
+ ```
407
+
408
+ ---
409
+
410
+ ## Testing Checklist
411
+
412
+ - [ ] Container runs as non-root user
413
+ - [ ] Base image is pinned with digest
414
+ - [ ] No secrets in image layers (ENV, ARG, COPY)
415
+ - [ ] Multi-stage build for secrets/build tools
416
+ - [ ] Minimal base image (alpine, distroless)
417
+ - [ ] Package manager cache cleaned
418
+ - [ ] .dockerignore excludes sensitive files
419
+ - [ ] No --privileged or dangerous capabilities
420
+ - [ ] No Docker socket mount
421
+ - [ ] Resource limits configured
422
+ - [ ] Network isolation configured
423
+ - [ ] Image scanned for vulnerabilities
424
+ - [ ] Read-only root filesystem where possible
425
+
426
+ ---
427
+
428
+ ## References
429
+
430
+ - [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)
431
+ - [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
432
+ - [OWASP Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)