Zelfs CISA lekte wachtwoorden via GitHub - tijd om je eigen project te checken
Als je met Claude Code aan je SaaS bouwt, wil je dit weten. Vandaag bouwt Claude Code je beveiligingscheck in een paar minuten. Geen excuses meer om het uit te stellen.
Wat is er gebeurd?
Ars Technica berichtte gisteren over een serieuze blunder: CISA, het Amerikaanse cybersecurity-agentschap, had SSH-sleutels, plaintext wachtwoorden en andere gevoelige data publiek staan in een GitHub-repo - al sinds november 2025. Het ging hier dus niet om een kleine startup, maar om het agentschap dat bedrijven juist waarschuwt voor dit soort fouten.
Als dit hen kan overkomen, kan het jou ook overkomen. Zeker als je snel bouwt met AI-tools en je hoofd vol zit met features in plaats van beveiliging.
Wat betekent dit voor jouw project?
Als je met Claude Code een MVP bouwt, heb je waarschijnlijk ergens een API-key, een database-URL of een Stripe-secret rechtstreeks in je code gezet om snel te testen. Misschien wel weken geleden. En misschien staat die code al op GitHub - zelfs als de repo privé is, wil je dit niet in je commit-geschiedenis hebben staan.
Vanavond ga je dit oplossen. Het kost je 20 minuten.
Hoe pak je het aan met Claude Code?
Stap 1: Laat Claude Code je hele project scannen op hardcoded secrets
Open Claude Code in je projectmap en geef deze prompt:
Scan alle bestanden in dit project op hardcoded secrets: API-keys, wachtwoorden, tokens, database-URLs, private keys en andere gevoelige waarden. Kijk ook in .env-bestanden die mogelijk per ongeluk zijn gecommit. Maak een lijst van elk gevonden bestand, regelnummer en het type secret (maar toon niet de volledige waarde). Sla .git en node_modules over.
Claude Code doorzoekt je codebase en geeft je een overzicht. Let op patronen zoals sk_live_, AIza, postgres://, mongodb+srv://, Bearer en losse strings die eruitzien als hashes of UUIDs gevolgd door een gevoelige variabelenaam.
Stap 2: Controleer je git-geschiedenis
Een secret verwijderen uit je code is niet genoeg als het ooit gecommit is geweest. Geef Claude Code deze prompt:
Geef me het bash-commando om in mijn git-geschiedenis te zoeken naar mogelijk gelekte strings, zoals 'sk_live', 'password', 'secret' en 'api_key'. Ik wil weten in welke commits deze voorkomen.
Claude Code geeft je dan zoiets:
git log --all --full-history -p | grep -iE '(sk_live|sk_test|password\s*=|secret\s*=|api_key\s*=|AIza|mongodb\+srv|postgres://)' | head -50
Zie je output? Dan heeft die waarde ooit in een commit gezeten en moet je de key of het wachtwoord intrekken via het dashboard van de betreffende dienst (Stripe, Supabase, OpenAI, etc.).
Stap 3: Laat Claude Code de fix uitvoeren
Heb je gevonden wat er mis is? Dan pak je het structureel aan. Geef Claude Code deze prompt:
In [bestandsnaam] staat op regel [X] een hardcoded waarde voor [naam van de variabele]. Verplaats deze naar een .env-bestand, voeg .env toe aan .gitignore als dat er nog niet in staat, en pas de code aan zodat hij de waarde leest via process.env. Maak ook een .env.example aan met een placeholder-waarde zodat andere developers weten wat ze moeten invullen.
Claude Code doet dan drie dingen tegelijk:
// Voorheen (fout)
const stripe = new Stripe('sk_live_abc123...');
// Na de fix (goed)
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
# .env (staat in .gitignore, nooit committen)
STRIPE_SECRET_KEY=sk_live_abc123...
# .env.example (wel committen, is veilig)
STRIPE_SECRET_KEY=sk_live_jouw_sleutel_hier
Stap 4: Zet een poortwachter in je project
Voeg dit toe zodat je nooit meer per ongeluk een secret commit. Vraag Claude Code:
Voeg een pre-commit hook toe aan dit project via husky of een simpel shell-script dat commits blokkeert als er strings zoals 'sk_live', 'AIza' of 'mongodb+srv' in de staged files staan.
Of als je dat te veel overhead vindt voor een vroeg MVP, vraag dan minimaal:
Voeg gitleaks of secretlint toe als dev dependency en configureer een npm-script 'check:secrets' dat ik handmatig kan draaien voor elke push.
Dan heb je altijd een veiligheidsnet met:
npm run check:secrets
Wat te checken na afloop
- Open je GitHub-repo en klik op je meest recente commits. Zie je ergens een echte API-sleutel of wachtwoord in de diff? Trek hem dan direct in via het bijbehorende dashboard.
- Controleer of
.envin je.gitignorestaat (zoek naar de regel.envin dat bestand). - Controleer of
.env.examplewél op GitHub staat en alleen placeholders bevat. - Draai
npm run check:secretsof het equivalent en kijk of de scan schoon terugkomt. - Kijk in je Stripe-, Supabase- of OpenAI-dashboard of er onverwachte API-calls zijn geweest. Was de key al een tijdje publiek? Dan is roteren verplicht, niet optioneel.
Twintig minuten werk vandaag voorkomt een hoop ellende later. En als CISA het kan vergeten, mag jij het ook vergeten zijn - maar nu niet meer.
Bij Eighty leer ik je Claude Code in het Nederlands gebruiken, van installatie tot een werkend SaaS-product. Wekelijks een nieuwe module, persoonlijke begeleiding.
