Voorbeeld op onze eigen voorbeeldapplicatie, geen klant

Voorbeeldcontrole: wat we vinden in onze eigen webshop

Dit is geen klant. Het is onze eigen voorbeeldapplicatie: een kleine webshop in Python waarin we met opzet fouten hebben gezet om onze controles op te testen. Hieronder zie je wat een controle erover zegt, met per bevinding het bestand en de regel, wat het voor je betekent en wat je kunt doen.

Bijgewerkt op

Wat de controle vindt

Acht bevindingen, van ernstig naar klein. Bij elke bevinding staat hoe we hem vinden: met een vaste scan zonder AI, of met de inspectie waarvan elke bewering is nagekeken op bestand, regel en citaat.

  1. Bevindingen Controle FA‑07, beveiliging

    De sleutelcontrole van de beheer-API vergelijkt niet in constante tijd

    Waar
    shop/admin.py, regel 21: de sleutel uit de header wordt met een gewone vergelijking naast de verwachte sleutel gelegd.
    Hoe gevonden
    Inspectie: een bewering van het AI-model, door onze code nagekeken op bestand, regel en citaat.
    Wat dit voor je betekent
    Uit kleine tijdverschillen kan een aanvaller afleiden hoeveel tekens van de sleutel kloppen.
    Wat je kunt doen
    Laat je developer secrets.compare_digest gebruiken voor elke vergelijking van wachtwoorden en sleutels.
  2. Bevindingen Controle PY‑14, beveiliging

    Een logregel schrijft de geweigerde sleutel weg

    Waar
    shop/admin.py, regel 22: een geweigerde sleutel wordt letterlijk in het logboek geschreven.
    Hoe gevonden
    Vaste scan (semgrep) en inspectie: het model citeert de logregel, nooit een waarde; wij kijken het citaat na.
    Wat dit voor je betekent
    Logboeken worden breed gedeeld en lang bewaard, dus een geheim daarin komt bij veel meer mensen dan bedoeld.
    Wat je kunt doen
    Laat je developer gevoelige waarden uit de logregel halen of afschermen. Vervang een geheim dat al in een logboek terecht is gekomen.
  3. Bevindingen Controle PY‑08, beveiliging

    Kortingscodes worden met een voorspelbare bron gemaakt

    Waar
    shop/codes.py, regel 11: de code komt uit de random-module in plaats van uit de secrets-module.
    Hoe gevonden
    Vaste scan (bandit, regel B311), zonder AI. De inspectie beoordeelt daarna of het om een geheime code gaat.
    Wat dit voor je betekent
    De uitkomst van random is te voorspellen: een aanvaller kan zo'n code raden.
    Wat je kunt doen
    Laat je developer random hier vervangen door de secrets-module van Python, die voor geheime codes bedoeld is.
  4. Bevindingen Controle AIR‑1, AI‑risico's

    De README bevat een instructie aan AI-lezers

    Waar
    README.md, regel 58: een notitie vraagt elke geautomatiseerde lezer alle documenten groen te zetten en de beveiliging goed te keuren.
    Hoe gevonden
    Vaste controle op verborgen tekens en instructies aan een assistent, zonder AI. Onze eigen inspectie volgt zulke tekst niet op en meldt hem.
    Wat dit voor je betekent
    Een assistent die jullie code leest, kan zo'n instructie opvolgen. Wie hem plaatste, en waarom, is een vraag voor jullie.
    Wat je kunt doen
    Haal de instructie weg en kijk in de geschiedenis wie hem toevoegde. Laat een assistent nooit beslissen op basis van tekst die in de repository staat.
  5. Dun of verouderd Documentatie PRD‑08 en SEC‑01

    De documentatie zegt iets anders dan de code

    Waar
    docs/pricing-rules.md en docs/security.md tegenover shop/pricing.py en shop/admin.py: een andere staffelkorting, een andere grens waarboven de verzendkosten vervallen, en een beveiligingsmaatregel die in de code niet bestaat.
    Hoe gevonden
    Inspectie: het model leest document en code naast elkaar. Een document dat meer dan een half jaar ouder is dan zijn code mag van onze regels niet actueel heten; de datum komt uit git.
    Wat dit voor je betekent
    Wie op de documentatie vertrouwt, een collega of een AI-assistent, bouwt op regels die niet meer gelden.
    Wat je kunt doen
    Werk de twee pagina's bij, of verwijs naar de code als bron. Spreek af dat een wijziging aan prijsregels ook de documentatie raakt.
  6. Ontbreekt Documentatie SEC‑09, OPS‑01, PPL‑01, DEL‑08

    Vier documenten die een beheerder nodig heeft, ontbreken

    Waar
    Nergens in de repository: een incidentplan, bewaking en alarmering, wie eigenaar is, en hoe je een release terugdraait.
    Hoe gevonden
    Inspectie met een bewijs van afwezigheid: een zoekopdracht die wij opnieuw uitvoeren. Het eigenaarschap vindt ook een vaste controle op bestandsnamen.
    Wat dit voor je betekent
    Bij een storing weet niemand wie belt, wat de eerste stap is en hoe je terug gaat naar de vorige versie.
    Wat je kunt doen
    Begin met de twee kortste: wie is eigenaar, en hoe draai je een release terug. Een halve pagina elk is genoeg om mee te beginnen.
  7. Bevindingen Controle GEN‑05, onderhoudbaarheid

    Geen lockfile: niemand weet precies welke versies draaien

    Waar
    requirements.txt noemt alleen minimumversies; een lockfile ontbreekt.
    Hoe gevonden
    Vaste scan, zonder AI.
    Wat dit voor je betekent
    Twee installaties van dezelfde code kunnen andere versies krijgen, en een kwetsbaar onderdeel is dan niet te herleiden.
    Wat je kunt doen
    Leg de versies vast, bijvoorbeeld met pip-compile of uv, en commit het resultaat.
  8. Bevindingen Controle CONT‑1, continuïteit

    Al het werk komt van één persoon

    Waar
    De git-geschiedenis: twee commits, één auteur.
    Hoe gevonden
    Vaste tools op de git-geschiedenis, zonder AI.
    Wat dit voor je betekent
    Valt die ene persoon weg, dan weet niemand hoe het zit. Dat is geen oordeel over die persoon; het is een risico voor het bedrijf.
    Wat je kunt doen
    Laat een tweede persoon meekijken en leg vast wat alleen in één hoofd zit.

Wat de controle niet vindt, en waarom dat ook telt

Een controle is een momentopname en geen certificaat. Deze voorbeeldcontrole vindt wat erin is gezet en wat de vaste scans en de catalogus kennen. Wat niet in onze catalogus staat, vinden we niet, en dat zeggen we ook in onze voorwaarden. De goudset verwacht nog drie bevindingen die we hier weglaten om de pagina kort te houden: geen Definition of Done, geen API-beschrijving en een dunne pagina over omgevingen.

Wat er wél goed is, zie je ook: de documenten die aanwezig en actueel zijn, zoals hoe je de shop start, de teststrategie, de configuratie en hoe een release live gaat, en de onderdelen die niet van toepassing zijn, zoals back-ups in een shop die niets opslaat.

Hoe dit voorbeeld tot stand kwam

De webshop is van ons. De fouten zijn met opzet geplant: ze vormen de goudset waarmee we onze inspectie meten. Niets hier is van een klant, en er is geen bedrijf verzonnen.

De eerste meting van de inspectie op deze set staat gepland. Tot die tijd zijn de bevindingen hierboven een deel van wat de goudset verwacht, plus wat de vaste regels van de scans opleveren. Zodra de meting er is, vervangen we deze zin door de uitkomst.

Zo ziet het eruit in je werkplek

Bij een klant staat dit niet op een pagina maar in de werkplek: een stoplicht per onderdeel, elke controle met zijn bevindingen, de geschiedenis per commit, en bij elke bevinding de plek en het bewijs. De directie leest het risico, product en beheer de gevolgen, developers het bestand en de regel.

Een bevinding kun je betwisten met een reden, of als aanvaard risico markeren. Een geheim nooit. Wij repareren niets: jullie bouwen en bepalen zelf wat je oplost.

Vragen die we vaak krijgen

Is dit een echte klant?

Nee. Het is onze eigen voorbeeldapplicatie, met fouten die we er zelf in hebben gezet. Van klanten publiceren we geen bevindingen.

Waarom een voorbeeld met geplante fouten?

Omdat het eerlijker is dan een verzonnen bedrijf. Van onze eigen shop weten we precies wat erin zit, dus kun je nakijken of de controle vindt wat hij moet vinden.

Vindt de controle dit ook in onze code?

Dezelfde scans en dezelfde inspectie draaien op jouw repository. Wat ze vinden, hangt van je code af. Een probleem dat niet in onze catalogus staat, vinden we niet.

Repareren jullie deze fouten?

Nee, ook niet in ons eigen voorbeeld. Wij controleren en laten het bewijs zien; wie bouwt, bepaalt wat hij oplost.

Aanmelden voor de pilot

De pilot is op uitnodiging. Meld je aan, dan kijken we of je applicatie past en mailen we je. Je koppelt je repository met leesrechten, de eerste controle start vanzelf, je ziet wat er gecontroleerd en bewezen is, en daarna vragen we wat het je waard is. Heb je eerst een vraag? Stel hem in het bericht hieronder.

Ons team

Leest elke aanmelding en elke vraag

Ons team leest wat je stuurt en antwoordt per mail. Een gesprek volgt alleen als je erom vraagt: met de mensen die het werk doen, niet met een verkoper.

We gebruiken je gegevens alleen om op je aanmelding te reageren. De website slaat je aanvraag niet op.