feat: laat de privacy-projectiegrens zijn eigen oppervlakken vinden (#516) #561
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!561
Loading…
Reference in a new issue
No description provided.
Delete branch "sec/projectiegrens-generiek"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Het laatste bouwbare punt uit #516:
audienceBoundarygeneriek maken.Wat het probleem was
SECURITY_DESIGN §8 belooft een compile-time garantie — dia-inhoud bereikt een
ontvanger alleen als
AudienceDeck, en dat type is alleen viaPrivacyProjectionte maken. De compiler houdt die belofte, maar alleen voor defuncties die het type ook echt eisen. Wélke functies dat zijn stond als vier
hard-gecodeerde namen. Een vijfde uitvoerkanaal werd niet gezien: precies het
fail-open dat OCIWACHT §6.0 als het te vermijden ontwerp beschrijft.
Waarom de voor de hand liggende omkering niet werkt
Verdenk elke functie die een rauwe
Deckaanneemt, en je krijgt 208 parametersover 67 bestanden. Dat is geen signaal.
Sleutelen op uitvoer levert er dertien: een functie die dia-inhoud aanneemt
én in zijn eigen body een artefact-primitief raakt (
FilePicker.saveFile,Clipboard.setData,toImage/toByteData, de atomaire schrijvers).De kern: de poort classificeert niet, hij dwingt classificatie af
Een
.ocideck-pakket draagt de bron één op één, en redigeren zou daar juistfout zijn — §6.0 zegt met zoveel woorden dat het deck 1-op-1 naar de
.mdgaat.Een PDF draagt een projectie, en een rauwe
Deckzou daar een lek zijn.Dezelfde vorm, tegengestelde eis, en geen enkele statische regel leidt dat
verschil af.
Dus doet de poort dat ook niet. Elk gevonden oppervlak moet in
_registrystaan als
audienceofsource, mét een geschreven reden. Een nieuwuitvoerkanaal breekt de bouw tot iemand opschrijft aan welke kant het staat.
Dat is de winst tegenover vier vaste namen: niet dat de poort het antwoord
weet, maar dat hij de vraag niet meer laat overslaan.
Wat dat opleverde
Twaalf bron-getrouwe kanalen die nergens geclassificeerd stonden: het pakket,
het auditdossier, de vier sidecars, de grafiekdata, het projectbestand. Geen
van alle een lek — ze horen de bron te dragen — maar wel twaalf plekken waar
de volgende bouwer moest raden aan welke kant hij stond.
De blinde vlek, expliciet
Een oppervlak dat het schrijven twee lagen verderop uitbesteedt en zelf alleen
strings doorgeeft, wordt niet gezien: de analyse kijkt binnen één declaratie,
niet door de aanroepgraaf heen. De laag die het primitief uiteindelijk aanraakt
wordt wél gezien, zolang die de dia-inhoud nog in handen heeft. Dat staat zo in
de kop van de poort en in
docs/CHECKS.md, want een poort waarvan de reikwijdteniet opgeschreven staat, wordt gelezen als een poort die alles ziet.
Getoetst in vier richtingen
Zoals de SAST-regels: nul op de schone repo, én alarm op een geplante
overtreding — drie soorten.
Deckterugkrijgt → faalt, met beideredenen apart.
kanten (het nieuwe pad ongeregistreerd, het oude niet meer te vinden).
Opgeruimd
audienceBoundaryen zijn helpers zijn uitcheck_conventions.dartweg — tweeoverlappende poorten is slechter dan één. Dat scheelt daar ook 89 regels.
make check,check-full, het CI-workflowbestand,CHECKS.md(eigen sectieplus de tabel),
SECURITY_DESIGN.md,ARCHITECTURE.mdenAPI_DOCUMENTATION.mdwijzen nu allemaal naar de nieuwe poort; er staat nergensmeer een verwijzing naar de oude.
Poorten
make checkgroen (5622 tests, dekking 86,2%), inclusief de nieuwe poort.Refs #516