@dewtech/dare-cli 3.3.0 → 3.4.0
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.
- package/LICENSE +21 -0
- package/README.md +764 -764
- package/dist/__tests__/confidence.test.js +13 -13
- package/dist/__tests__/dag-converter.test.js +56 -56
- package/dist/__tests__/mcp-server/server.test.js +3 -16
- package/dist/__tests__/mcp-server/server.test.js.map +1 -1
- package/dist/__tests__/project-generator.test.js +2 -2
- package/dist/__tests__/project-generator.test.js.map +1 -1
- package/dist/__tests__/refine.test.js +49 -49
- package/dist/__tests__/reverse-collection.test.js +6 -6
- package/dist/__tests__/review.test.js +38 -38
- package/dist/__tests__/security-hardening.test.d.ts +2 -0
- package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
- package/dist/__tests__/security-hardening.test.js +101 -0
- package/dist/__tests__/security-hardening.test.js.map +1 -0
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +0 -0
- package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
- package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init-validation.test.js +81 -0
- package/dist/commands/__tests__/init-validation.test.js.map +1 -0
- package/dist/commands/__tests__/init.integration.spec.js +6 -4
- package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
- package/dist/commands/__tests__/init.spec.d.ts +2 -0
- package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
- package/dist/commands/__tests__/init.spec.js +88 -0
- package/dist/commands/__tests__/init.spec.js.map +1 -0
- package/dist/commands/blueprint.js +122 -122
- package/dist/commands/design.js +20 -20
- package/dist/commands/init-validation.d.ts +22 -0
- package/dist/commands/init-validation.d.ts.map +1 -0
- package/dist/commands/init-validation.js +54 -0
- package/dist/commands/init-validation.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +26 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/graphrag/graph-rag.js +24 -24
- package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/auth.test.js +72 -0
- package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
- package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
- package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
- package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
- package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
- package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
- package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
- package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
- package/dist/mcp-server/bin/server.js +18 -6
- package/dist/mcp-server/bin/server.js.map +1 -1
- package/dist/mcp-server/boot-config.d.ts +6 -0
- package/dist/mcp-server/boot-config.d.ts.map +1 -0
- package/dist/mcp-server/boot-config.js +17 -0
- package/dist/mcp-server/boot-config.js.map +1 -0
- package/dist/mcp-server/middleware/auth.d.ts +10 -0
- package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
- package/dist/mcp-server/middleware/auth.js +44 -0
- package/dist/mcp-server/middleware/auth.js.map +1 -0
- package/dist/mcp-server/middleware/cors.d.ts +6 -0
- package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
- package/dist/mcp-server/middleware/cors.js +30 -0
- package/dist/mcp-server/middleware/cors.js.map +1 -0
- package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
- package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
- package/dist/mcp-server/middleware/error-handler.js +14 -0
- package/dist/mcp-server/middleware/error-handler.js.map +1 -0
- package/dist/mcp-server/server.d.ts +7 -2
- package/dist/mcp-server/server.d.ts.map +1 -1
- package/dist/mcp-server/server.js +185 -105
- package/dist/mcp-server/server.js.map +1 -1
- package/dist/skills/registry-mock.json +109 -109
- package/dist/skills/tests/manifest.spec.js +20 -20
- package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
- package/dist/stacks/dna-emitter.js +69 -69
- package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +254 -252
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/stack-bootstrap.js +371 -371
- package/dist/utils/templates.js +394 -394
- package/dist/verification/__tests__/anti-tamper.test.js +13 -13
- package/package.json +96 -93
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +68 -68
- package/templates/backend/node-nestjs/.env.example +9 -9
- package/templates/backend/node-nestjs/nest-cli.json +8 -8
- package/templates/backend/node-nestjs/package.json +50 -50
- package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
- package/templates/backend/node-nestjs/src/app.module.ts +15 -15
- package/templates/backend/node-nestjs/src/app.service.ts +8 -8
- package/templates/backend/node-nestjs/src/main.ts +24 -24
- package/templates/backend/node-nestjs/tsconfig.json +21 -21
- package/templates/backend/php-laravel/.env.example +22 -22
- package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
- package/templates/backend/php-laravel/composer.json +40 -40
- package/templates/backend/python-fastapi/.env.example +4 -4
- package/templates/backend/python-fastapi/app/api/router.py +8 -8
- package/templates/backend/python-fastapi/app/core/config.py +20 -20
- package/templates/backend/python-fastapi/main.py +35 -35
- package/templates/backend/python-fastapi/requirements.txt +13 -13
- package/templates/backend/rust-axum/.env.example +3 -3
- package/templates/backend/rust-axum/Cargo.toml +23 -23
- package/templates/backend/rust-axum/src/errors.rs +30 -30
- package/templates/backend/rust-axum/src/main.rs +32 -32
- package/templates/backend/rust-axum/src/routes.rs +6 -6
- package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
- package/templates/frontend/leptos-csr/Cargo.toml +16 -16
- package/templates/frontend/leptos-csr/Trunk.toml +10 -10
- package/templates/frontend/leptos-csr/index.html +11 -11
- package/templates/frontend/leptos-csr/src/lib.rs +20 -20
- package/templates/frontend/leptos-csr/style/main.scss +19 -19
- package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
- package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
- package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
- package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
- package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
- package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
- package/templates/frontend/react/index.html +12 -12
- package/templates/frontend/react/package.json +35 -35
- package/templates/frontend/react/src/App.tsx +25 -25
- package/templates/frontend/react/src/main.tsx +9 -9
- package/templates/frontend/vue/package.json +32 -32
- package/templates/frontend/vue/src/App.vue +7 -7
- package/templates/frontend/vue/src/main.ts +10 -10
- package/templates/frontend/vue/src/router/index.ts +14 -14
- package/templates/frontend/vue/src/views/HomeView.vue +6 -6
- package/templates/hooks/pre-commit-dare-validate +24 -24
- package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
- package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -21
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
- package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
- package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
- package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
- package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
- package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
- package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
- package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
- package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
- package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
- package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
- package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
- package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
- package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
- package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
- package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
- package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
- package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
- package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
- package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
- package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
- package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
- package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
- package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
- package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
- package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
- package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
- package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
- package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
- package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
- package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
- package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
- package/templates/ide/claude/.claude/commands/dare-bench.md +18 -18
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
- package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
- package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
- package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
- package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
- package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
- package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
- package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
- package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
- package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
- package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
- package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
- package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
- package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
- package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
- package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
- package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
- package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
- package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
- package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
- package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
- package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
- package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
- package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
- package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
- package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
- package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
- package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
- package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
- package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
- package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
- package/templates/ide/claude/.claude/settings.example.json +35 -35
- package/templates/ide/claude/CLAUDE.md +146 -146
- package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/claude/templates/DESIGN-template.md +129 -129
- package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/claude/templates/TASKS-template.md +26 -26
- package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
- package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -18
- package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
- package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
- package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
- package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
- package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
- package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
- package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
- package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
- package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
- package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
- package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
- package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
- package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
- package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
- package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
- package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
- package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
- package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
- package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
- package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
- package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
- package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
- package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
- package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
- package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
- package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
- package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
- package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
- package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
- package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
- package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
- package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
- package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
- package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
- package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
- package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
- package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
- package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
- package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
- package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
- package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
- package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
- package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
- package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/cursor/templates/TASKS-template.md +26 -26
- package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
- package/templates/shared/docker-compose.yml +41 -41
- package/templates/stacks/go-gin/.dare/skills.yml +11 -11
- package/templates/stacks/go-gin/.env.example +24 -24
- package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/go-gin/README.md.tpl +38 -38
- package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
- package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
- package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
- package/templates/stacks/go-gin/db/queries/users.sql +23 -23
- package/templates/stacks/go-gin/gitignore +7 -7
- package/templates/stacks/go-gin/go.mod.tpl +17 -17
- package/templates/stacks/go-gin/internal/config/config.go +41 -41
- package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
- package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
- package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
- package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
- package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
- package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
- package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
- package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
- package/templates/stacks/go-gin/internal/model/user.go +17 -17
- package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
- package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
- package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
- package/templates/stacks/go-gin/llms.txt.tpl +54 -54
- package/templates/stacks/go-gin/openapi.json.tpl +46 -46
- package/templates/stacks/go-gin/sqlc.yaml +14 -14
- package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
- package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
- package/templates/stacks/go-stdlib/.env.example +24 -24
- package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/go-stdlib/README.md.tpl +41 -41
- package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
- package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
- package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
- package/templates/stacks/go-stdlib/gitignore +6 -6
- package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
- package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
- package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
- package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
- package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
- package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
- package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
- package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
- package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
- package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
- package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
- package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
- package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
- package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
- package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
- package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
- package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
- package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
- package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
- package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
- package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
- package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-go/.env.example +14 -14
- package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/mcp-go/README.md.tpl +50 -50
- package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
- package/templates/stacks/mcp-go/gitignore +6 -6
- package/templates/stacks/mcp-go/go.mod.tpl +9 -9
- package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
- package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
- package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
- package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
- package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
- package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
- package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
- package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
- package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
- package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-node-ts/.env.example +16 -16
- package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
- package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
- package/templates/stacks/mcp-node-ts/gitignore +7 -7
- package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
- package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
- package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
- package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
- package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
- package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
- package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
- package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
- package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
- package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
- package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
- package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
- package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
- package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-python/.env.example +14 -14
- package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
- package/templates/stacks/mcp-python/README.md.j2 +49 -49
- package/templates/stacks/mcp-python/gitignore +12 -12
- package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
- package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
- package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
- package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
- package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
- package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
- package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
- package/templates/stacks/mcp-python/src/transports/http.py +12 -12
- package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
- package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
- package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
- package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
- package/templates/stacks/mcp-rust/.env.example +14 -14
- package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
- package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
- package/templates/stacks/mcp-rust/README.md.tera +50 -50
- package/templates/stacks/mcp-rust/gitignore +5 -5
- package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
- package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
- package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
- package/templates/stacks/mcp-rust/src/lib.rs +6 -6
- package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
- package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
- package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
- package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
- package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
- package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
- package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
- package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
- package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
- package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
- package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
- package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
- package/templates/stacks/node-nestjs/.env.example +21 -21
- package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
- package/templates/stacks/node-nestjs/README.md.hbs +35 -35
- package/templates/stacks/node-nestjs/gitignore +7 -7
- package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
- package/templates/stacks/node-nestjs/nest-cli.json +16 -16
- package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
- package/templates/stacks/node-nestjs/package.json.hbs +57 -57
- package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
- package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
- package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
- package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
- package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
- package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
- package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
- package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
- package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
- package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
- package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
- package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
- package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
- package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
- package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
- package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
- package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
- package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
- package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
- package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
- package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
- package/templates/stacks/node-nestjs/tsconfig.json +28 -28
- package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
- package/templates/stacks/php-laravel/.env.example +41 -41
- package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
- package/templates/stacks/php-laravel/README.md.hbs +36 -36
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
- package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
- package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
- package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
- package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
- package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
- package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
- package/templates/stacks/php-laravel/app/Models/User.php +44 -44
- package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
- package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
- package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
- package/templates/stacks/php-laravel/artisan +12 -12
- package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
- package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
- package/templates/stacks/php-laravel/composer.json.hbs +58 -58
- package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
- package/templates/stacks/php-laravel/config/reverb.php +34 -34
- package/templates/stacks/php-laravel/config/sanctum.php +15 -15
- package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
- package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
- package/templates/stacks/php-laravel/gitignore +23 -23
- package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
- package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
- package/templates/stacks/php-laravel/phpstan.neon +9 -9
- package/templates/stacks/php-laravel/routes/api.php +13 -13
- package/templates/stacks/php-laravel/routes/channels.php +7 -7
- package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
- package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
- package/templates/stacks/php-laravel/tests/Pest.php +5 -5
- package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
- package/templates/stacks/python-fastapi/.env.example +21 -21
- package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
- package/templates/stacks/python-fastapi/README.md.j2 +35 -35
- package/templates/stacks/python-fastapi/alembic/env.py +46 -46
- package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
- package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
- package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
- package/templates/stacks/python-fastapi/app/core/config.py +24 -24
- package/templates/stacks/python-fastapi/app/core/security.py +34 -34
- package/templates/stacks/python-fastapi/app/db/session.py +22 -22
- package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
- package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
- package/templates/stacks/python-fastapi/app/models/user.py +30 -30
- package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
- package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
- package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
- package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
- package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
- package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
- package/templates/stacks/python-fastapi/gitignore +12 -12
- package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
- package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
- package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
- package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
- package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
- package/templates/stacks/ruby-rails-8/.env.example +20 -20
- package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
- package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
- package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
- package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
- package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
- package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
- package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
- package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
- package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
- package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
- package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
- package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
- package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
- package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
- package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
- package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
- package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
- package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
- package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
- package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
- package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
- package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
- package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
- package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
- package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
- package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
- package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
- package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
- package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
- package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
- package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
- package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
- package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
- package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
- package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
- package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
- package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
- package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
- package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
- package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
- package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
- package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
- package/templates/stacks/rust-axum/.env.example +26 -26
- package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
- package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
- package/templates/stacks/rust-axum/README.md.tera +37 -37
- package/templates/stacks/rust-axum/gitignore +5 -5
- package/templates/stacks/rust-axum/llms.txt.tera +54 -54
- package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
- package/templates/stacks/rust-axum/openapi.json.tera +46 -46
- package/templates/stacks/rust-axum/src/config.rs +45 -45
- package/templates/stacks/rust-axum/src/errors.rs +48 -48
- package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
- package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
- package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
- package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
- package/templates/stacks/rust-axum/src/lib.rs +19 -19
- package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
- package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
- package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
- package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
- package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
- package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/models/user.rs +13 -13
- package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
- package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
- package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
- package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
- package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
- package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
- package/dist/commands/new.d.ts +0 -16
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -104
- package/dist/commands/new.js.map +0 -1
|
@@ -1,245 +1,245 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Diretrizes de Segurança — OWASP Top 10, Supply Chain, Segredos e Dependências Vulneráveis para todas as fases do DARE
|
|
3
|
-
globs: *.md, *.php, *.py, *.go, *.vue, *.js, *.ts, *.rs, *.toml, *.yaml, *.yml
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Diretrizes de Segurança DARE
|
|
7
|
-
|
|
8
|
-
Você é um Especialista em AppSec. Garanta que **Design → Blueprint → Tasks → Execução** sigam rigorosamente as práticas a seguir.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Aplicação nas Fases do DARE
|
|
13
|
-
|
|
14
|
-
### Fase 1 — Design (`/generate-design` / `/dare-design`)
|
|
15
|
-
|
|
16
|
-
- **Requisitos de segurança obrigatórios** (seção RS-*):
|
|
17
|
-
- RS-01: validação de entrada (OWASP A03)
|
|
18
|
-
- RS-02: hash de senhas / proteção de dados sensíveis (OWASP A02)
|
|
19
|
-
- RS-03: controle de acesso por recurso (OWASP A01)
|
|
20
|
-
- RS-04: auditoria de dependências sem CVE HIGH/CRITICAL (OWASP A06)
|
|
21
|
-
- RS-05: secrets via variáveis de ambiente — nunca em código
|
|
22
|
-
- Identifique vetores de ataque na ideia inicial e adicione mitigações em **Riscos**
|
|
23
|
-
|
|
24
|
-
### Fase 2 — Architect (`/generate-blueprint` / `/dare-blueprint`)
|
|
25
|
-
|
|
26
|
-
- Endpoints da API: inclua coluna `Auth` (JWT/apiKey/público) e middleware de rate limiting
|
|
27
|
-
- Modelo de dados: marque campos sensíveis (PII, tokens, hashes) e como são protegidos
|
|
28
|
-
- Fases do plano: inclua **Fase N-1 = Auditoria de Segurança e Dependências** com critério de DONE explícito
|
|
29
|
-
- Validation gates por stack devem incluir o comando de auditoria de dependências
|
|
30
|
-
|
|
31
|
-
### Fase 3 — Tasks (`/generate-tasks`)
|
|
32
|
-
|
|
33
|
-
- Toda task que adiciona dependência externa → validation gate inclui `npm audit` / `cargo audit` / `pip-audit` / `composer audit`
|
|
34
|
-
- Crie task dedicada para: headers de segurança HTTP, rate limiting, scan de secrets
|
|
35
|
-
- Seção "Considerações de Segurança" obrigatória em cada `EXECUTION/task-*.md`
|
|
36
|
-
|
|
37
|
-
### Fase 4 — Execute (`/execute-task`)
|
|
38
|
-
|
|
39
|
-
Aplique as proteções abaixo ao implementar qualquer código.
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## OWASP Top 10 — Implementação
|
|
44
|
-
|
|
45
|
-
### A01 — Broken Access Control
|
|
46
|
-
|
|
47
|
-
- Verifique permissão no **recurso**, não só na rota: `user.can('update', post)` / `authorize('update', $post)` / `check_permission(user, resource)`
|
|
48
|
-
- Princípio do menor privilégio: tokens têm escopos mínimos necessários
|
|
49
|
-
- Nunca exponha IDs sequenciais em URLs para recursos privados — use UUID ou ULID
|
|
50
|
-
- Multi-tenant: **sempre** filtre por `tenant_id` / `org_id` em toda query
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
// ✅ certo — verifica ownership antes de retornar
|
|
54
|
-
const post = await db.post.findFirst({ where: { id, authorId: session.userId } });
|
|
55
|
-
if (!post) throw new ForbiddenError();
|
|
56
|
-
|
|
57
|
-
// ❌ errado — qualquer usuário autenticado acessa qualquer post
|
|
58
|
-
const post = await db.post.findUnique({ where: { id } });
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### A02 — Cryptographic Failures
|
|
62
|
-
|
|
63
|
-
- Senhas: **Argon2id** (preferido) ou Bcrypt (min cost 12) — nunca MD5/SHA1/SHA256 para senhas
|
|
64
|
-
- Dados sensíveis em repouso: criptografar PII com AES-256-GCM
|
|
65
|
-
- Dados em trânsito: HTTPS obrigatório; HSTS header em produção
|
|
66
|
-
- Nunca logue senha, token, chave de API, número de cartão, CPF completo
|
|
67
|
-
- JWT: assine com RS256 (chave assimétrica) para tokens públicos; HS256 + segredo forte (≥ 256 bits) para internos
|
|
68
|
-
|
|
69
|
-
```rust
|
|
70
|
-
// ✅ Rust — Argon2 via argon2 crate
|
|
71
|
-
use argon2::{Argon2, PasswordHash, PasswordHasher, PasswordVerifier};
|
|
72
|
-
let hash = Argon2::default().hash_password(password.as_bytes(), &salt)?;
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### A03 — Injection
|
|
76
|
-
|
|
77
|
-
**SQL Injection:**
|
|
78
|
-
```python
|
|
79
|
-
# ✅ SQLAlchemy — parametrizado
|
|
80
|
-
result = db.execute(select(User).where(User.email == email))
|
|
81
|
-
|
|
82
|
-
# ❌ nunca
|
|
83
|
-
db.execute(f"SELECT * FROM users WHERE email = '{email}'")
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**Command Injection:**
|
|
87
|
-
```go
|
|
88
|
-
// ✅ Go — lista de args, não shell string
|
|
89
|
-
cmd := exec.Command("convert", inputFile, outputFile)
|
|
90
|
-
|
|
91
|
-
// ❌ nunca
|
|
92
|
-
exec.Command("sh", "-c", "convert "+userInput)
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**XSS:** escape de saída no frontend; `Content-Security-Policy` no backend; evite `innerHTML` / `dangerouslySetInnerHTML` com dados do usuário.
|
|
96
|
-
|
|
97
|
-
**Prompt Injection (IA):** se o projeto processa entradas de usuários em prompts LLM:
|
|
98
|
-
- Separe instrução do sistema e dados do usuário por delimitadores claros
|
|
99
|
-
- Valide e sanitize a entrada antes de inserir no prompt
|
|
100
|
-
- Nunca confie em output do LLM como código a ser executado sem sandboxing
|
|
101
|
-
|
|
102
|
-
### A04 — Insecure Design
|
|
103
|
-
|
|
104
|
-
- Valide **no servidor** sempre, mesmo que o frontend já valide
|
|
105
|
-
- Allowlists > blocklists para validação de campos, tipos de arquivo, domínios
|
|
106
|
-
- Implemente rate limiting antes de qualquer lógica de negócio em endpoints públicos
|
|
107
|
-
|
|
108
|
-
### A05 — Security Misconfiguration
|
|
109
|
-
|
|
110
|
-
- Stack traces e erros detalhados: **apenas em desenvolvimento** — produção retorna mensagem genérica
|
|
111
|
-
- Headers de segurança obrigatórios em produção:
|
|
112
|
-
```
|
|
113
|
-
Strict-Transport-Security: max-age=31536000; includeSubDomains
|
|
114
|
-
X-Frame-Options: DENY
|
|
115
|
-
X-Content-Type-Options: nosniff
|
|
116
|
-
Content-Security-Policy: default-src 'self'
|
|
117
|
-
Referrer-Policy: strict-origin-when-cross-origin
|
|
118
|
-
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
119
|
-
```
|
|
120
|
-
- CORS: nunca `Access-Control-Allow-Origin: *` para endpoints autenticados
|
|
121
|
-
- Desabilite métodos HTTP desnecessários (TRACE, OPTIONS em APIs simples)
|
|
122
|
-
|
|
123
|
-
### A06 — Vulnerable and Outdated Components ← **crítico para Ralph Loop**
|
|
124
|
-
|
|
125
|
-
**Comandos de auditoria por stack:**
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
# Node.js / npm — rodar antes de todo commit com novas deps
|
|
129
|
-
npm audit --audit-level=high
|
|
130
|
-
npm audit fix # corrige automaticamente quando possível
|
|
131
|
-
|
|
132
|
-
# Rust / Cargo
|
|
133
|
-
cargo install cargo-audit # uma vez
|
|
134
|
-
cargo audit # detecta CVEs no RustSec Advisory DB
|
|
135
|
-
cargo update # bumpa versões compatíveis
|
|
136
|
-
|
|
137
|
-
# Python
|
|
138
|
-
pip install pip-audit
|
|
139
|
-
pip-audit # CVEs via OSV + PyPI
|
|
140
|
-
pip-audit --fix # auto-fix quando possível
|
|
141
|
-
|
|
142
|
-
# PHP / Composer
|
|
143
|
-
composer audit # nativo desde Composer 2.4
|
|
144
|
-
composer update --with-all-dependencies [pacote] # fix pontual
|
|
145
|
-
|
|
146
|
-
# Go
|
|
147
|
-
go list -json -m all | nancy sleuth # ou govulncheck
|
|
148
|
-
govulncheck ./... # ferramenta oficial Google
|
|
149
|
-
|
|
150
|
-
# Docker images
|
|
151
|
-
docker scout cves [imagem] # se Docker Scout disponível
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Critério inegociável:** nenhuma dependência com CVE de nível **HIGH** ou **CRITICAL** pode entrar em produção sem justificativa documentada e plano de upgrade.
|
|
155
|
-
|
|
156
|
-
### A07 — Authentication Failures
|
|
157
|
-
|
|
158
|
-
- Rate limiting no endpoint de login: máx 5 tentativas / 15 min por IP + por usuário
|
|
159
|
-
- Tokens JWT: `exp` máx 15 min para access token; refresh token com rotação
|
|
160
|
-
- Logout: invalide refresh token no servidor (não confie só no lado cliente)
|
|
161
|
-
- Senhas: mínimo 12 caracteres; bloquear senhas da lista HaveIBeenPwned
|
|
162
|
-
- MFA: ofereça TOTP (RFC 6238) para contas com acesso a dados sensíveis
|
|
163
|
-
|
|
164
|
-
### A08 — Software and Data Integrity
|
|
165
|
-
|
|
166
|
-
- Valide assinatura / checksum de artefatos externos antes de usar
|
|
167
|
-
- Nunca confie em dados enviados pelo cliente para decisões de autorização
|
|
168
|
-
- CI/CD: pins de versão em actions (`actions/checkout@v4` não `@main`)
|
|
169
|
-
- Lockfiles (`package-lock.json`, `Cargo.lock`, `poetry.lock`) devem ser commitados
|
|
170
|
-
|
|
171
|
-
### A09 — Security Logging and Monitoring
|
|
172
|
-
|
|
173
|
-
Logue (estruturado JSON, sem dados sensíveis):
|
|
174
|
-
- Autenticação: login OK/FAIL, logout, refresh, MFA challenge
|
|
175
|
-
- Autorização: acesso negado (403) com recurso e userId
|
|
176
|
-
- Erros 5xx em produção com trace-id (sem stack trace completo)
|
|
177
|
-
- Operações destrutivas: delete, disable, role change
|
|
178
|
-
|
|
179
|
-
Nunca logue: senhas, tokens, chaves de API, números de cartão, CPF/SSN completo.
|
|
180
|
-
|
|
181
|
-
### A10 — SSRF
|
|
182
|
-
|
|
183
|
-
- Se a aplicação faz requisições para URLs fornecidas pelo usuário:
|
|
184
|
-
- Valide contra allowlist de domínios
|
|
185
|
-
- Bloqueie IPs privados (`127.x`, `10.x`, `172.16-31.x`, `192.168.x`, `169.254.x`)
|
|
186
|
-
- Bloqueie acesso a metadados de cloud (`169.254.169.254`)
|
|
187
|
-
- Use timeout agressivo (máx 5s) e sem redirects automáticos
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Segredos e Supply Chain
|
|
192
|
-
|
|
193
|
-
### Nunca em código
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
# Padrões proibidos em commits — configure pre-commit hook ou git-secrets:
|
|
197
|
-
password = "..."
|
|
198
|
-
api_key = "..."
|
|
199
|
-
secret_key = "..."
|
|
200
|
-
AWS_SECRET_ACCESS_KEY = "..."
|
|
201
|
-
DATABASE_URL = "postgres://user:password@..."
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Gestão de segredos
|
|
205
|
-
|
|
206
|
-
- Desenvolvimento: arquivo `.env` (no `.gitignore`) com `.env.example` sem valores reais
|
|
207
|
-
- CI/CD: variáveis de ambiente ou secrets do pipeline (GitHub Actions Secrets, etc.)
|
|
208
|
-
- Produção: vault (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager)
|
|
209
|
-
- Rotação: tokens de serviço rotacionados a cada 90 dias
|
|
210
|
-
|
|
211
|
-
### Verificação pre-commit (recomendado)
|
|
212
|
-
|
|
213
|
-
```bash
|
|
214
|
-
# Instalar detect-secrets
|
|
215
|
-
pip install detect-secrets
|
|
216
|
-
detect-secrets scan > .secrets.baseline
|
|
217
|
-
detect-secrets audit .secrets.baseline
|
|
218
|
-
|
|
219
|
-
# Ou git-secrets
|
|
220
|
-
git secrets --install
|
|
221
|
-
git secrets --register-aws
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## Validation Gates de Segurança no Ralph Loop
|
|
227
|
-
|
|
228
|
-
Adicione ao ciclo de cada task que mexe em dependências ou configuração:
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
# 1. Auditoria de dependências (obrigatório se houve mudança em deps)
|
|
232
|
-
npm audit --audit-level=high # Node
|
|
233
|
-
cargo audit # Rust
|
|
234
|
-
pip-audit # Python
|
|
235
|
-
composer audit # PHP
|
|
236
|
-
|
|
237
|
-
# 2. Scan de secrets (obrigatório em tasks de config/infra/CI)
|
|
238
|
-
detect-secrets scan --baseline .secrets.baseline
|
|
239
|
-
|
|
240
|
-
# 3. Headers de segurança (para tasks de configuração de servidor)
|
|
241
|
-
# Verificar manualmente ou com curl:
|
|
242
|
-
curl -I https://staging.example.com | grep -E "Strict-Transport|X-Frame|X-Content|Content-Security"
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
> **Gate obrigatório:** CVE HIGH/CRITICAL nas dependências = task **FAILED** até corrigi-las.
|
|
1
|
+
---
|
|
2
|
+
description: Diretrizes de Segurança — OWASP Top 10, Supply Chain, Segredos e Dependências Vulneráveis para todas as fases do DARE
|
|
3
|
+
globs: *.md, *.php, *.py, *.go, *.vue, *.js, *.ts, *.rs, *.toml, *.yaml, *.yml
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Diretrizes de Segurança DARE
|
|
7
|
+
|
|
8
|
+
Você é um Especialista em AppSec. Garanta que **Design → Blueprint → Tasks → Execução** sigam rigorosamente as práticas a seguir.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Aplicação nas Fases do DARE
|
|
13
|
+
|
|
14
|
+
### Fase 1 — Design (`/generate-design` / `/dare-design`)
|
|
15
|
+
|
|
16
|
+
- **Requisitos de segurança obrigatórios** (seção RS-*):
|
|
17
|
+
- RS-01: validação de entrada (OWASP A03)
|
|
18
|
+
- RS-02: hash de senhas / proteção de dados sensíveis (OWASP A02)
|
|
19
|
+
- RS-03: controle de acesso por recurso (OWASP A01)
|
|
20
|
+
- RS-04: auditoria de dependências sem CVE HIGH/CRITICAL (OWASP A06)
|
|
21
|
+
- RS-05: secrets via variáveis de ambiente — nunca em código
|
|
22
|
+
- Identifique vetores de ataque na ideia inicial e adicione mitigações em **Riscos**
|
|
23
|
+
|
|
24
|
+
### Fase 2 — Architect (`/generate-blueprint` / `/dare-blueprint`)
|
|
25
|
+
|
|
26
|
+
- Endpoints da API: inclua coluna `Auth` (JWT/apiKey/público) e middleware de rate limiting
|
|
27
|
+
- Modelo de dados: marque campos sensíveis (PII, tokens, hashes) e como são protegidos
|
|
28
|
+
- Fases do plano: inclua **Fase N-1 = Auditoria de Segurança e Dependências** com critério de DONE explícito
|
|
29
|
+
- Validation gates por stack devem incluir o comando de auditoria de dependências
|
|
30
|
+
|
|
31
|
+
### Fase 3 — Tasks (`/generate-tasks`)
|
|
32
|
+
|
|
33
|
+
- Toda task que adiciona dependência externa → validation gate inclui `npm audit` / `cargo audit` / `pip-audit` / `composer audit`
|
|
34
|
+
- Crie task dedicada para: headers de segurança HTTP, rate limiting, scan de secrets
|
|
35
|
+
- Seção "Considerações de Segurança" obrigatória em cada `EXECUTION/task-*.md`
|
|
36
|
+
|
|
37
|
+
### Fase 4 — Execute (`/execute-task`)
|
|
38
|
+
|
|
39
|
+
Aplique as proteções abaixo ao implementar qualquer código.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## OWASP Top 10 — Implementação
|
|
44
|
+
|
|
45
|
+
### A01 — Broken Access Control
|
|
46
|
+
|
|
47
|
+
- Verifique permissão no **recurso**, não só na rota: `user.can('update', post)` / `authorize('update', $post)` / `check_permission(user, resource)`
|
|
48
|
+
- Princípio do menor privilégio: tokens têm escopos mínimos necessários
|
|
49
|
+
- Nunca exponha IDs sequenciais em URLs para recursos privados — use UUID ou ULID
|
|
50
|
+
- Multi-tenant: **sempre** filtre por `tenant_id` / `org_id` em toda query
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
// ✅ certo — verifica ownership antes de retornar
|
|
54
|
+
const post = await db.post.findFirst({ where: { id, authorId: session.userId } });
|
|
55
|
+
if (!post) throw new ForbiddenError();
|
|
56
|
+
|
|
57
|
+
// ❌ errado — qualquer usuário autenticado acessa qualquer post
|
|
58
|
+
const post = await db.post.findUnique({ where: { id } });
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### A02 — Cryptographic Failures
|
|
62
|
+
|
|
63
|
+
- Senhas: **Argon2id** (preferido) ou Bcrypt (min cost 12) — nunca MD5/SHA1/SHA256 para senhas
|
|
64
|
+
- Dados sensíveis em repouso: criptografar PII com AES-256-GCM
|
|
65
|
+
- Dados em trânsito: HTTPS obrigatório; HSTS header em produção
|
|
66
|
+
- Nunca logue senha, token, chave de API, número de cartão, CPF completo
|
|
67
|
+
- JWT: assine com RS256 (chave assimétrica) para tokens públicos; HS256 + segredo forte (≥ 256 bits) para internos
|
|
68
|
+
|
|
69
|
+
```rust
|
|
70
|
+
// ✅ Rust — Argon2 via argon2 crate
|
|
71
|
+
use argon2::{Argon2, PasswordHash, PasswordHasher, PasswordVerifier};
|
|
72
|
+
let hash = Argon2::default().hash_password(password.as_bytes(), &salt)?;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### A03 — Injection
|
|
76
|
+
|
|
77
|
+
**SQL Injection:**
|
|
78
|
+
```python
|
|
79
|
+
# ✅ SQLAlchemy — parametrizado
|
|
80
|
+
result = db.execute(select(User).where(User.email == email))
|
|
81
|
+
|
|
82
|
+
# ❌ nunca
|
|
83
|
+
db.execute(f"SELECT * FROM users WHERE email = '{email}'")
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Command Injection:**
|
|
87
|
+
```go
|
|
88
|
+
// ✅ Go — lista de args, não shell string
|
|
89
|
+
cmd := exec.Command("convert", inputFile, outputFile)
|
|
90
|
+
|
|
91
|
+
// ❌ nunca
|
|
92
|
+
exec.Command("sh", "-c", "convert "+userInput)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**XSS:** escape de saída no frontend; `Content-Security-Policy` no backend; evite `innerHTML` / `dangerouslySetInnerHTML` com dados do usuário.
|
|
96
|
+
|
|
97
|
+
**Prompt Injection (IA):** se o projeto processa entradas de usuários em prompts LLM:
|
|
98
|
+
- Separe instrução do sistema e dados do usuário por delimitadores claros
|
|
99
|
+
- Valide e sanitize a entrada antes de inserir no prompt
|
|
100
|
+
- Nunca confie em output do LLM como código a ser executado sem sandboxing
|
|
101
|
+
|
|
102
|
+
### A04 — Insecure Design
|
|
103
|
+
|
|
104
|
+
- Valide **no servidor** sempre, mesmo que o frontend já valide
|
|
105
|
+
- Allowlists > blocklists para validação de campos, tipos de arquivo, domínios
|
|
106
|
+
- Implemente rate limiting antes de qualquer lógica de negócio em endpoints públicos
|
|
107
|
+
|
|
108
|
+
### A05 — Security Misconfiguration
|
|
109
|
+
|
|
110
|
+
- Stack traces e erros detalhados: **apenas em desenvolvimento** — produção retorna mensagem genérica
|
|
111
|
+
- Headers de segurança obrigatórios em produção:
|
|
112
|
+
```
|
|
113
|
+
Strict-Transport-Security: max-age=31536000; includeSubDomains
|
|
114
|
+
X-Frame-Options: DENY
|
|
115
|
+
X-Content-Type-Options: nosniff
|
|
116
|
+
Content-Security-Policy: default-src 'self'
|
|
117
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
118
|
+
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
119
|
+
```
|
|
120
|
+
- CORS: nunca `Access-Control-Allow-Origin: *` para endpoints autenticados
|
|
121
|
+
- Desabilite métodos HTTP desnecessários (TRACE, OPTIONS em APIs simples)
|
|
122
|
+
|
|
123
|
+
### A06 — Vulnerable and Outdated Components ← **crítico para Ralph Loop**
|
|
124
|
+
|
|
125
|
+
**Comandos de auditoria por stack:**
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# Node.js / npm — rodar antes de todo commit com novas deps
|
|
129
|
+
npm audit --audit-level=high
|
|
130
|
+
npm audit fix # corrige automaticamente quando possível
|
|
131
|
+
|
|
132
|
+
# Rust / Cargo
|
|
133
|
+
cargo install cargo-audit # uma vez
|
|
134
|
+
cargo audit # detecta CVEs no RustSec Advisory DB
|
|
135
|
+
cargo update # bumpa versões compatíveis
|
|
136
|
+
|
|
137
|
+
# Python
|
|
138
|
+
pip install pip-audit
|
|
139
|
+
pip-audit # CVEs via OSV + PyPI
|
|
140
|
+
pip-audit --fix # auto-fix quando possível
|
|
141
|
+
|
|
142
|
+
# PHP / Composer
|
|
143
|
+
composer audit # nativo desde Composer 2.4
|
|
144
|
+
composer update --with-all-dependencies [pacote] # fix pontual
|
|
145
|
+
|
|
146
|
+
# Go
|
|
147
|
+
go list -json -m all | nancy sleuth # ou govulncheck
|
|
148
|
+
govulncheck ./... # ferramenta oficial Google
|
|
149
|
+
|
|
150
|
+
# Docker images
|
|
151
|
+
docker scout cves [imagem] # se Docker Scout disponível
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Critério inegociável:** nenhuma dependência com CVE de nível **HIGH** ou **CRITICAL** pode entrar em produção sem justificativa documentada e plano de upgrade.
|
|
155
|
+
|
|
156
|
+
### A07 — Authentication Failures
|
|
157
|
+
|
|
158
|
+
- Rate limiting no endpoint de login: máx 5 tentativas / 15 min por IP + por usuário
|
|
159
|
+
- Tokens JWT: `exp` máx 15 min para access token; refresh token com rotação
|
|
160
|
+
- Logout: invalide refresh token no servidor (não confie só no lado cliente)
|
|
161
|
+
- Senhas: mínimo 12 caracteres; bloquear senhas da lista HaveIBeenPwned
|
|
162
|
+
- MFA: ofereça TOTP (RFC 6238) para contas com acesso a dados sensíveis
|
|
163
|
+
|
|
164
|
+
### A08 — Software and Data Integrity
|
|
165
|
+
|
|
166
|
+
- Valide assinatura / checksum de artefatos externos antes de usar
|
|
167
|
+
- Nunca confie em dados enviados pelo cliente para decisões de autorização
|
|
168
|
+
- CI/CD: pins de versão em actions (`actions/checkout@v4` não `@main`)
|
|
169
|
+
- Lockfiles (`package-lock.json`, `Cargo.lock`, `poetry.lock`) devem ser commitados
|
|
170
|
+
|
|
171
|
+
### A09 — Security Logging and Monitoring
|
|
172
|
+
|
|
173
|
+
Logue (estruturado JSON, sem dados sensíveis):
|
|
174
|
+
- Autenticação: login OK/FAIL, logout, refresh, MFA challenge
|
|
175
|
+
- Autorização: acesso negado (403) com recurso e userId
|
|
176
|
+
- Erros 5xx em produção com trace-id (sem stack trace completo)
|
|
177
|
+
- Operações destrutivas: delete, disable, role change
|
|
178
|
+
|
|
179
|
+
Nunca logue: senhas, tokens, chaves de API, números de cartão, CPF/SSN completo.
|
|
180
|
+
|
|
181
|
+
### A10 — SSRF
|
|
182
|
+
|
|
183
|
+
- Se a aplicação faz requisições para URLs fornecidas pelo usuário:
|
|
184
|
+
- Valide contra allowlist de domínios
|
|
185
|
+
- Bloqueie IPs privados (`127.x`, `10.x`, `172.16-31.x`, `192.168.x`, `169.254.x`)
|
|
186
|
+
- Bloqueie acesso a metadados de cloud (`169.254.169.254`)
|
|
187
|
+
- Use timeout agressivo (máx 5s) e sem redirects automáticos
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Segredos e Supply Chain
|
|
192
|
+
|
|
193
|
+
### Nunca em código
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Padrões proibidos em commits — configure pre-commit hook ou git-secrets:
|
|
197
|
+
password = "..."
|
|
198
|
+
api_key = "..."
|
|
199
|
+
secret_key = "..."
|
|
200
|
+
AWS_SECRET_ACCESS_KEY = "..."
|
|
201
|
+
DATABASE_URL = "postgres://user:password@..."
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Gestão de segredos
|
|
205
|
+
|
|
206
|
+
- Desenvolvimento: arquivo `.env` (no `.gitignore`) com `.env.example` sem valores reais
|
|
207
|
+
- CI/CD: variáveis de ambiente ou secrets do pipeline (GitHub Actions Secrets, etc.)
|
|
208
|
+
- Produção: vault (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager)
|
|
209
|
+
- Rotação: tokens de serviço rotacionados a cada 90 dias
|
|
210
|
+
|
|
211
|
+
### Verificação pre-commit (recomendado)
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Instalar detect-secrets
|
|
215
|
+
pip install detect-secrets
|
|
216
|
+
detect-secrets scan > .secrets.baseline
|
|
217
|
+
detect-secrets audit .secrets.baseline
|
|
218
|
+
|
|
219
|
+
# Ou git-secrets
|
|
220
|
+
git secrets --install
|
|
221
|
+
git secrets --register-aws
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Validation Gates de Segurança no Ralph Loop
|
|
227
|
+
|
|
228
|
+
Adicione ao ciclo de cada task que mexe em dependências ou configuração:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# 1. Auditoria de dependências (obrigatório se houve mudança em deps)
|
|
232
|
+
npm audit --audit-level=high # Node
|
|
233
|
+
cargo audit # Rust
|
|
234
|
+
pip-audit # Python
|
|
235
|
+
composer audit # PHP
|
|
236
|
+
|
|
237
|
+
# 2. Scan de secrets (obrigatório em tasks de config/infra/CI)
|
|
238
|
+
detect-secrets scan --baseline .secrets.baseline
|
|
239
|
+
|
|
240
|
+
# 3. Headers de segurança (para tasks de configuração de servidor)
|
|
241
|
+
# Verificar manualmente ou com curl:
|
|
242
|
+
curl -I https://staging.example.com | grep -E "Strict-Transport|X-Frame|X-Content|Content-Security"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
> **Gate obrigatório:** CVE HIGH/CRITICAL nas dependências = task **FAILED** até corrigi-las.
|