chore(security): add seed prod-guard and pre-commit secret-scan#340
Merged
cola500 merged 1 commit intoMay 19, 2026
Merged
Conversation
- assertSeedSafe() blocks prisma/seed.ts against hosted Supabase unless ALLOW_SEED_PROD=true (prevents overwriting real account passwords with "test123") - pre-commit hook scans staged content for provider key formats, private keys, service_role JWTs, and DB connection strings Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Två defense-in-depth-skydd för operativ säkerhet. Rebasad ovanpå
origin/staging(inkl. hela Sprint 3-A + 3-A follow-up) så inga main-noise-commits följer med.Innehåll (1 commit, 6 filer, +435 / −3)
assertSeedSafe()(prisma/seed-guard.ts) — blockerarprisma/seed.tsfrån att köra mot hosted Supabase. Förhindrar att seed-skript överskriver riktiga konton medtest123-lösenord om DATABASE_URL råkar peka på prod. Kräver explicitALLOW_SEED_PROD=true-bypass.scripts/check-no-secrets.sh— pre-commit-hook scannar staged content för:sk-ant-, OpenAIsk-proj-/sk-, Stripesk_live_/sk_test_/rk_live_/whsec_, GoogleAIza..., AWSAKIA..., GitHubgh[pousr]_+ fine-grained PAT, Slackxox[baprs]-)Patterns är prefix-baserade och längd-validerade för low-noise. Override per rad med
secret-scan:allow. Skippar known-safe-filer (.env.example,.template,.sample, scriptet och dess testfil,.husky/pre-commit, docs).False-positive verification mot 3A-fixtures
Verifierat före push:
a0000000-0000-4000-…,b0000000-0000-4000-…) matchar ingen scanner-regex.upload/route.test.ts, kördescripts/check-no-secrets.sh→ exit 0 (ingen blockering).sk-ant-…,sk-proj-…,sk_live_…) → scanner blockerade alla tre med exit 1. Verifierar att scannern faktiskt fångar riktiga secrets, inte bara är passiv.Trade-off: test-fixturer split via runtime concat
scripts/check-no-secrets.test.tsinnehåller 7 fixturer med secret-format-strängar för att validera scannern. Källfilen splittar prefix via runtime-concatenation ('sk_' + 'live_AAAA...') så GitHub:s egen secret-scanner inte triggar push-protection på denna fil. Runtime-strängen är identisk → scanner-testet beter sig exakt likadant.Test plan
npx vitest run prisma/seed-guard.test.ts scripts/check-no-secrets.test.ts— 20/20 passednpm run typecheck— passbash scripts/check-no-secrets.shmot working tree — exit 0Rebase note
Branchen rebasades från
f4a630ca(main) tillorigin/staging(628c787) för att eliminera main-noise (README cosmetic-updates, voice-log refactor som redan finns på staging via annan commit). PR-diff visar nu endast de 6 säkerhets-filerna.