Claude Code veilig gebruiken: rechten, secrets en controle

“Raak geen geheime gegevens aan” is een goede afspraak, maar nog geen beveiliging. Als een programma die gegevens technisch kan lezen en versturen, blijft die toegang bestaan. Dat onderscheid wordt belangrijk zodra Claude Code commando’s mag uitvoeren en externe informatie verwerkt.
Mijn uitgangspunt is eenvoudig: geef een taak alleen de toegang die nodig is, houd gevolgen overzichtelijk en controleer de uitkomst. Je hoeft daarvoor geen aanval na te bouwen. Wel moet je weten welke grens door software wordt afgedwongen en welke grens alleen in een zin staat.
Bepaal welke toegang deze taak nodig heeft
Inventariseer eerst wat de opdracht raakt. Alleen bronbestanden lezen vraagt andere toegang dan dependencies installeren, een database wijzigen of code publiceren. Maak dat onderscheid voordat je een brede toestemming bevestigt.
De permissiedocumentatie beschrijft de ingestelde rechten en modi. Bekijk ze via /permissions. Plan is bedoeld voor onderzoek zonder bronbestanden te bewerken. Een prompt of projectinstructie verandert de toegangsregels van Claude Code niet.
Ik zou bij een onbekend project beginnen met beperkte toegang en een concrete vraag. Heeft de taak later extra toegang nodig, beoordeel dan de reden en de voorgestelde actie. “Anders lukt het niet” is geen uitleg van welke bestanden, diensten of gegevens erbij betrokken zijn.
Controleer ook bestaande toestemmingen. Een sessie kan al ruimere rechten hebben gekregen voor een vorige taak. Vertrouw daarom op de actieve instellingen die je nu ziet, niet op wat je denkt ooit te hebben gekozen.
Begrijp de grens van de shell-sandbox
De ingebouwde sandbox begrenst shellcommando’s op bestands- en netwerkniveau. Ze is beschikbaar op macOS, Linux en WSL2; native Windows ondersteunt deze shell-sandbox niet. Open /sandbox om de status en grenzen te bekijken.
De sandbox staat volgens de actuele documentatie standaard uit. Ze omvat shellcommando’s, niet alle bestands- en webtools, hooks of MCP-processen. Ook bij ingeschakelde sandbox verdienen leesrechten en geërfde omgevingsvariabelen aandacht. Het woord “sandbox” betekent dus niet dat alle secrets onzichtbaar zijn.
Mijn advies is om bij iedere uitzondering opnieuw te kijken wat je openzet. Een geweigerde netwerkverbinding kan een verkeerde instelling blootleggen, maar ook precies de bedoelde grens zijn. Los de oorzaak gericht op en beoordeel een verzoek om buiten de sandbox verder te gaan als een nieuwe toegangsbeslissing.
Houd geheime gegevens buiten het werkmateriaal
Voor veel bouwtaken zijn geen productiesleutels nodig. Gebruik fictieve records, een ontwikkelverbinding en accounts met beperkte rechten. Geef Claude genoeg om het probleem te begrijpen zonder een volledige export van je bedrijfsomgeving mee te sturen.
Let ook op uitvoer. Een opdracht kan een sleutel in een terminal, testlog of schermafbeelding zetten. Wat eenmaal in een gesprek staat, wordt onderdeel van dat werkmateriaal. Vraag bij diagnose om aanwezigheid of status te controleren in plaats van geheime waarden af te drukken.
Bestanden negeren in Git is iets anders dan toegang blokkeren. Git negeren voorkomt niet dat een proces het bestand leest. Beperk dus ook de technische toegang en de credentials die het proces meekrijgt. Controleer daarnaast welke verbonden tools buiten de projectmap gegevens kunnen ophalen.
De datagebruiksvoorwaarden verschillen tussen consumenten- en commerciële accounts. Bij consumenten speelt de gekozen trainingsinstelling mee; commerciële voorwaarden hebben een ander uitgangspunt. Beoordeel je account en instellingen, in plaats van “betaald” gelijk te stellen aan een algemene privacygarantie.
Behandel instructies in externe inhoud als gegevens
Een repository, webpagina of issue kan tekst bevatten die de AI probeert te sturen. Anthropic beschrijft dat risico in de securitydocumentatie als prompt injection. Externe tekst kan er overtuigend uitzien zonder dat de schrijver bevoegd is om jouw taak of toegangsrechten te wijzigen.
Een praktisch criterium: verandert deze tekst het doel, vraagt zij om geheime informatie of wil zij een controle overslaan? Dan moet je de instructie terugbrengen naar haar werkelijke status: inhoud die je beoordeelt. Verifieer een beweerde opdracht via de bekende eigenaar.
Dat is geen garantie dat het model elke misleiding herkent. Daarom blijven toegangsgrenzen en controle nodig. Hoe kleiner de beschikbare bevoegdheden, hoe minder een verkeerde interpretatie kan raken. Geef niet uit gemak toegang tot mail, hosting en productiegegevens bij een taak die alleen een lokaal bestand nodig heeft.
Uitgewerkt: een CSV-import verbeteren
Stel dat een interne app een CSV-bestand met voorraadregels importeert. Je wilt foutmeldingen begrijpelijker maken. Het voorbeeldbestand dat je ontvangt bevat echte klantnamen en vrije tekstvelden. De productiedatabase staat bovendien als beschikbare verbinding op je computer.
Begin met een klein fictief CSV-bestand dat dezelfde kolommen en fouttypen heeft. Vervang echte namen en bedragen door oefengegevens. De opdracht is nu: wijs aan waar de import valideert en maak de melding bij een ontbrekend artikelnummer begrijpelijk. De productieverbinding is daarvoor niet nodig.
Laat de uitvoering in een passende ontwikkelomgeving plaatsvinden, met rechten voor de betrokken bronbestanden en tests. Beperk externe verbindingen. De inhoud van een CSV-cel is invoer voor de import en geen toestemming om extra tools te gebruiken. Bespreek afwijkende instructies uit het bestand voordat ernaar wordt gehandeld.
Controleer de diff op meer dan de melding. Is de validatie intact gebleven? Gaat de app nog zorgvuldig om met ongeldige rijen? Zijn foutlogs vrij van onnodige persoonsgegevens? Laat een test de ontbrekende waarde afdekken en controleer daarnaast een geldig bestand. Gebruik geen echte klantimport om een schermmelding te beoordelen.
Als de taak alsnog databasewijzigingen blijkt te vereisen, stop dan die uitbreiding en beoordeel haar apart. Een tekstverbetering mag niet ongemerkt de bevoegdheid worden om productierecords te veranderen. Zo blijft de opdracht begrijpelijk en het resultaat controleerbaar.
Review blijft een eigen stap
Lees voorgestelde commando’s en wijzigingen voordat je gevoelige acties toestaat. Laat bij risicovolle code iemand anders meekijken en gebruik de projectcontroles. Een testsuite bewijst wat ze afdekt; een overtuigende toelichting bewijst geen veilige autorisatie.
Voor je eerste beperkte oefentaak kun je onze installatiehandleiding gebruiken. Wil je toegang en controle meenemen in je eigen appwerk, bekijk de Vibe Coding Training. Mijn advies: maak een beveiligingsgrens zichtbaar in instellingen en bewijs, voordat je erop vertrouwt.
Zelf aan de slag met Vibe Coding?
Leer hoe je met AI-tools werkende apps bouwt. Onze praktische cursussen nemen je stap voor stap mee.
Blijf op de hoogte
Ontvang maandelijks de nieuwste tips over vibe coding, AI tools en exclusieve content.
Meer artikelen
Een MCP-server bouwen met één eenvoudige voorraadtool
Bouw een kleine MCP-server die fictieve voorraad uitleest. Je ziet het entrypoint, invoerschema, resultaat en foutgedrag zonder een bedrijfssysteem aan te sluiten.
Codex op Windows: kies bewust tussen native en WSL2
Je kunt Codex native op Windows gebruiken of binnen WSL2. Kies op basis van je project, en controleer apart waar de terminal en de agent draaien.
Claude Code hooks: start een vaste controle na een bewerking
Gebruik Claude Code hooks voor een kleine, vaste kwaliteitscontrole. Met een oefenvoorbeeld voor ontbrekende vertalingen en uitleg over wat de uitslag bewijst.