BK cloud / systemen Notities
NL
English ENDeutsch DEEspañol ES中文 ZHFrançais FRPortuguês (Brasil) PT-BR日本語 JAहिन्दी HINederlands NL
Laten we kennismaken ↗
← Terug naar praktijknotities

Wat ik in oktober 2026 leerde: veilig ontwikkelen als routine

Beveiliging wordt vaak als een toegangspoort beschreven: eerst wordt er ontwikkeld, daarna controleert iemand het resultaat. Mijn belangrijkste les deze maand is dat veilig ontwikkelen beter werkt als een cyclus. Kleine automatische controles draaien terwijl het systeem verandert, bevindingen bevatten genoeg context om ze te begrijpen en herstel wordt gewoon ontwikkelwerk in plaats van een uitzonderlijk opruimproject.

Ik richt me op twee praktische onderdelen van die cyclus: beveiligingslinting en GitHub Dependabot-meldingen. Geen van beide is nieuw of een compleet beveiligingsprogramma. Samen maken ze wel twee veelvoorkomende risicoklassen vroeg zichtbaar: onveilige patronen in code en configuratie, en bekende kwetsbaarheden in externe afhankelijkheden.

Een beveiligingstool heeft pas waarde wanneer de bevindingen begrepen, geprioriteerd en opgevolgd kunnen worden.

Beveiligingslinting is uitvoerbare richtlijn

Een goede beveiligingslinter is meer dan een syntaxiscontrole. Hij zet afgesproken technische regels om in herhaalbare feedback. Afhankelijk van het project kan dat gaan om ingebedde geheimen, onveilige shellconstructies, zwakke cryptografische keuzes, te ruime rechten, onveilige infrastructuurstandaarden of verdachte gegevensverwerking.

Het voordeel zit in het moment. Een waarschuwing terwijl een wijziging nog klein is, is goedkoper te begrijpen en te verhelpen dan hetzelfde probleem na de uitrol. De ontwikkelaar weet nog waarom die regel er staat, de beoordeling blijft gericht en er is minder omringende code om opnieuw te bekijken.

Meer regels zorgen echter niet vanzelf voor meer veiligheid. Een regelset met veel ruis leert mensen de uitvoer te negeren. Ik vond het nuttiger om te beginnen met betrouwbare controles, vast te leggen waarom die ertoe doen en pas uit te breiden wanneer het team een echte zwakte van een irrelevant patroon kan onderscheiden.

Dependabot is een inbox, geen automatische piloot

Dependabot-waarschuwingen leveren waardevolle informatie: een afhankelijkheid valt onder een gepubliceerd beveiligingsadvies, de kwetsbare versies zijn bekend en er is mogelijk een upgradepad. De gevaarlijke interpretatie is dat elke waarschuwing onmiddellijk tot een blinde versieverhoging moet leiden.

Elke melding heeft context nodig:

  • Zit de kwetsbare component in productie of alleen in ontwikkelhulpmiddelen?
  • Gebruikt de applicatie het getroffen codepad?
  • Wordt het pakket rechtstreeks beheerd of indirect als afhankelijkheid meegeleverd?
  • Introduceert de voorgestelde versie wijzigingen die bestaand gedrag breken?
  • Beperken compenserende maatregelen de blootstelling al?

Ernst is een vertrekpunt, niet de hele prioriteit. Een probleem met gemiddelde ernst op een openbaar aanvraagpad kan eerder aandacht verdienen dan een kritiek advies voor een onbereikbare buildcomponent. Combineer het advies, de werkelijke architectuur en de kosten van een veilige update in de beslissing.

Het lockfile hoort bij de beveiligingsgrens

Afhankelijkheden beheren is niet klaar zodra een pakketnaam in een manifest staat. De werkelijk opgeloste afhankelijkheidsboom telt. Lockfiles maken builds reproduceerbaar, tonen welke versies daadwerkelijk worden geïnstalleerd en geven automatische scanners een concreet netwerk om te beoordelen.

Dit leidt tot een eenvoudige maar belangrijke werkwijze: werk manifest en lockfile samen bij, beoordeel onverwachte transitieve wijzigingen, voer alle tests en kwaliteitscontroles uit en voeg geen gegenereerde afhankelijkheidswijzigingen samen die niemand heeft bekeken. Automatisering kan de wijziging voorbereiden; de engineer die haar accepteert blijft verantwoordelijk.

Kwaliteitscontroles moeten schijnzekerheid tegengaan

Automatische toegangspoorten zijn aantrekkelijk omdat ze een helder antwoord geven: geslaagd of mislukt. Die duidelijkheid is nuttig, maar kan ook schijnzekerheid bieden. Een geslaagde scan betekent dat de ingestelde regels geen overeenkomend probleem vonden in het onderzochte materiaal. Het betekent niet dat het ontwerp veilig is.

Voor deze website controleert de automatische kwaliteitspoort vóór uitrol JavaScript-syntaxis, interne links, gebruikte bestanden, JSON-structuur, dubbele ID’s, gedeelde metrieken en andere consistentieregels. Beveiligingscontroles passen daar goed naast, maar architectuur blijft menselijke vragen vereisen: is dit endpoint nodig? Heeft de browser deze data nodig? Kan de bewerking statisch blijven? Wat is de kleinste IAM-machtiging? Wat gebeurt er als een geplande taak mislukt?

Het sterkste resultaat ontstaat door deterministische automatisering te combineren met bewuste beoordeling.

Prioriteiten moeten zichtbaar zijn

Een groeiend aantal waarschuwingen is geen herstelstrategie. Bevindingen worden beheersbaar wanneer hun status en onderbouwing zichtbaar zijn. Een eenvoudige werkwijze kan genoeg zijn:

  1. Controleer of de bevinding van toepassing is op de huidige code en de uitgerolde architectuur.
  2. Classificeer blootstelling, impact en misbruikbaarheid, in plaats van op één score te vertrouwen.
  3. Beslis of je bijwerkt, beperkt, verwijdert, tijdelijk accepteert of verder onderzoekt.
  4. Leg vast de reden, verantwoordelijke en het verwachte beoordelingsmoment.
  5. Verifieer met tests en een tweede scan na de wijziging.

Zo worden uitzonderingen beoordeelbaar. Een fout-positieve melding onderdrukken kan terecht zijn; haar stilzwijgend verbergen niet. Het verschil is een uitleg die een toekomstige beheerder ter discussie kan stellen.

Veilige standaardinstellingen kosten minder dan herhaalde herinneringen

Een van de nuttigste uitkomsten van terugkerende bevindingen is geen zoveelste gesloten melding, maar een betere standaard. Als dezelfde onveilige configuratie steeds terugkomt, kan de duurzame oplossing een sjabloon, gedeelde workflow, herbruikbaar beleid of projectbasis zijn die de gewenste keuze vanzelfsprekend maakt.

Dit principe bepaalde ook het portfolio. De openbare site blijft statisch. S3 is privé achter CloudFront. Browsercode ontvangt openbare totalen in plaats van ruwe operationele gegevens. Geplande functies hebben beperkte schrijfdoelen. Die architectuurkeuzes verwijderen hele categorieën applicatierisico voordat linting begint.

Vijf lessen die ik meeneem

Snelle feedback verandert gedrag. Een precieze waarschuwing tijdens de ontwikkeling is nuttiger dan een lang rapport weken later.

Ruis is een beveiligingsprobleem. Meldingen van lage kwaliteit vragen aandacht die naar betekenisvolle bevindingen zou moeten gaan.

Automatisering stelt voor; engineers beslissen. Updates van afhankelijkheden vragen nog steeds om architectuurcontext, tests en beoordeling.

Een geslaagde controle is een aanwijzing, geen bewijs. Tools dekken bekende patronen; dreigingsmodellering en ontwerpbeoordeling gaan over de bedoeling en systeemgrenzen.

De beste oplossing maakt de volgende wijziging eenvoudiger. Sjablonen, beleid en veilige standaardinstellingen schalen beter dan steeds dezelfde fout corrigeren.

Wat ik hierna wil verbeteren

In mijn volgende ronde wil ik de feedbackcyclus in één oogopslag begrijpelijker maken: urgente blootstelling scheiden van gewoon onderhoud, de onderbouwing van uitzonderingen dicht bij de bevinding houden en meten hoe snel bruikbare meldingen van detectie naar geverifieerd herstel gaan.

Ik wil deze controles ook duidelijker verbinden met de architectuur die ze beschermen. Een afhankelijkheidswaarschuwing, een bevinding over IAM-beleid en een beslissing over openbare gegevens kunnen uit verschillende tools komen, maar beschrijven allemaal vertrouwensgrenzen in hetzelfde systeem.

De belangrijkste les

Veilig ontwikkelen ontstaat niet door één scanner toe te voegen of één meldingsfeed aan te zetten. Het ontstaat wanneer bruikbare signalen vroeg komen, beslissingen context meenemen en het normale opleverproces de veilige aanpak begrijpelijk en herhaalbaar maakt.

Die routine probeer ik op te bouwen: voldoende geautomatiseerd om consistent te zijn, rustig genoeg om te vertrouwen en menselijk genoeg om goede beslissingen te nemen wanneer de tool dat niet kan.