docs(privacy): benoem de ene server die de uitgever zelf draait (#579) #683

Merged
brenno merged 1 commit from docs/cve-spiegel-579 into main 2026-07-22 20:29:24 +00:00
Owner

Lost #579 op — de privacy/beveiligingskop van de wachtrij.

Het probleem

docs/PRIVACY.md opende met "There is no OciDeck account, no OciDeck server, and no telemetry", en COMPLIANCE.md zei dat de stichting OciDeck niet "as a service" host. Ondertussen staat cveapi.librekat.nl — een CVE-spiegel van diezelfde stichting — als standaard in lib/models/settings.dart.

Verderop in de tabel stond die spiegel netjes vermeld, mét "run by the publisher". Maar de samenvatting is de alinea die mensen lezen, en dit is precies de zin die een kritische lezer als eerste natrekt. Een privacyverklaring die daar onwaar is, verliest meer dan hij op één regel wint.

Waarom dit meer tekst kreeg dan een tabelregel

Wélk lek je opzoekt is zelden neutraal. Wie een specifieke kwetsbaarheid zoekt, werkt meestal aan een specifiek systeem, vaak voor een specifieke klant, vaak vóór het openbaar is. De code zegt dat waar de functie woont (cve_picker.dart: wélk lek je opzoekt is het gevoeligste dat je prijsgeeft); de privacyverklaring zei het nergens.

De nieuwe sectie noemt het exacte verzoek, en één ding dat er echt toe doet: de zoekterm gaat als query-parameter in de URL mee. Dat is het deel dat elke gewone webserver standaard in zijn toegangslog schrijft, naast het IP-adres en een tijdstempel. Ga er dus van uit dat het gelogd wordt tenzij de beheerder zegt van niet.

Verder: dat Stichting LibreKAT hiervoor verwerkingsverantwoordelijke is (niet de gebruiker, en niet "niemand"), waar rechten op inzage en verwijdering liggen, en drie manieren om de spiegel te vermijden — hem uit laten (dat is de standaard), de lokale CVE-database, of je eigen spiegel instellen.

Wat er bewust niet in staat

Bewaartermijnen. Welke velden die server bewaart en hoe lang is een eigenschap van een installatie, niet van de code, en deze repo kan het niet vaststellen. Er staat nu met zoveel woorden dát dit de grens is, en dat de stichting het apart moet publiceren.

Dat is een bewuste keuze: een verzonnen bewaartermijn in een privacyverklaring is erger dan een benoemd gat. Het gat is zichtbaar en te dichten; een verzonnen getal wordt geloofd.

Onderweg meegenomen

"there is no OciDeck-held copy of your data to request or erase" — waar voor je decks, onwaar voor die ene dienst. Nu met de uitzondering erbij, inclusief de artikelen 15 en 17.

De poort

Zolang de code een host van de uitgever als standaard declareert, moeten beide documenten die host noemen, moet PRIVACY.md een verwerkingsverantwoordelijke aanwijzen, en mogen de twee absolute claims er niet staan. Wordt de standaard ooit een host die níét van de uitgever is, dan vervalt de eis vanzelf — dan is er ook niets meer te melden.

Eén ding moest die poort leren. Deze repo citeert in een correctienotitie bewust de oude, onware zin, zodat je later terugvindt wat er stond en waarom het veranderde. Een poort die op de kale zin zoekt, bestraft dus precies de correctie die hij wil afdwingen. Cursieve correctieblokken tellen daarom niet mee — beweringen tellen, geschiedenis niet.

In drie richtingen getoetst: elk van de twee claims teruggezet maakt de poort rood, en de hostnaam uit PRIVACY.md halen ook. Zonder die tegenproef zou de groep ook groen zijn als hij niets deed.

Getoetst

  • make check groen (één flakering in git_native_merge_test onder last; slaagt los en bij de tweede ronde — die test start echte git-processen).
  • make check-secrets: geen lekken. make sast: 0 bevindingen.
  • Elke bewering in de nieuwe sectie tegen de code nagelopen: standaard uit, alleen desktop, geen eigen headers, instelbare basis-URL. Eén ding klopte niet in mijn eerste versie — ik schreef Settings → Standards voor de lokale database terwijl die onder Security staat; gecorrigeerd vóór de commit.

Wat hierna nog van #579 overblijft

Niets in deze repo. De publicatie van het logbeleid van cveapi.librekat.nl ligt bij de stichting, net als de websitehelft van #597. Ik stel voor het issue te sluiten en dat als apart punt te laten staan als je dat wilt volgen.

Closes #579

Lost #579 op — de privacy/beveiligingskop van de wachtrij. ## Het probleem `docs/PRIVACY.md` opende met *"There is no OciDeck account, no OciDeck server, and no telemetry"*, en `COMPLIANCE.md` zei dat de stichting OciDeck niet *"as a service"* host. Ondertussen staat `cveapi.librekat.nl` — een CVE-spiegel van diezelfde stichting — als standaard in `lib/models/settings.dart`. Verderop in de tabel stond die spiegel netjes vermeld, mét "run by the publisher". Maar de samenvatting is de alinea die mensen lezen, en dit is precies de zin die een kritische lezer als eerste natrekt. Een privacyverklaring die daar onwaar is, verliest meer dan hij op één regel wint. ## Waarom dit meer tekst kreeg dan een tabelregel Wélk lek je opzoekt is zelden neutraal. Wie een specifieke kwetsbaarheid zoekt, werkt meestal aan een specifiek systeem, vaak voor een specifieke klant, vaak vóór het openbaar is. De code zegt dat waar de functie woont (`cve_picker.dart`: *wélk lek je opzoekt is het gevoeligste dat je prijsgeeft*); de privacyverklaring zei het nergens. De nieuwe sectie noemt het exacte verzoek, en één ding dat er echt toe doet: de zoekterm gaat als **query-parameter in de URL** mee. Dat is het deel dat elke gewone webserver standaard in zijn toegangslog schrijft, naast het IP-adres en een tijdstempel. Ga er dus van uit dat het gelogd wordt tenzij de beheerder zegt van niet. Verder: dat Stichting LibreKAT hiervoor verwerkingsverantwoordelijke is (niet de gebruiker, en niet "niemand"), waar rechten op inzage en verwijdering liggen, en drie manieren om de spiegel te vermijden — hem uit laten (dat *is* de standaard), de lokale CVE-database, of je eigen spiegel instellen. ## Wat er bewust niet in staat **Bewaartermijnen.** Welke velden die server bewaart en hoe lang is een eigenschap van een installatie, niet van de code, en deze repo kan het niet vaststellen. Er staat nu met zoveel woorden dát dit de grens is, en dat de stichting het apart moet publiceren. Dat is een bewuste keuze: een verzonnen bewaartermijn in een privacyverklaring is erger dan een benoemd gat. Het gat is zichtbaar en te dichten; een verzonnen getal wordt geloofd. ## Onderweg meegenomen *"there is no OciDeck-held copy of your data to request or erase"* — waar voor je decks, onwaar voor die ene dienst. Nu met de uitzondering erbij, inclusief de artikelen 15 en 17. ## De poort Zolang de code een host van de uitgever als standaard declareert, moeten beide documenten die host noemen, moet `PRIVACY.md` een verwerkingsverantwoordelijke aanwijzen, en mogen de twee absolute claims er niet staan. Wordt de standaard ooit een host die níét van de uitgever is, dan vervalt de eis vanzelf — dan is er ook niets meer te melden. Eén ding moest die poort leren. Deze repo citeert in een correctienotitie bewust de oude, onware zin, zodat je later terugvindt wat er stond en waarom het veranderde. Een poort die op de kale zin zoekt, bestraft dus precies de correctie die hij wil afdwingen. Cursieve correctieblokken tellen daarom niet mee — beweringen tellen, geschiedenis niet. **In drie richtingen getoetst:** elk van de twee claims teruggezet maakt de poort rood, en de hostnaam uit `PRIVACY.md` halen ook. Zonder die tegenproef zou de groep ook groen zijn als hij niets deed. ## Getoetst - `make check` groen (één flakering in `git_native_merge_test` onder last; slaagt los en bij de tweede ronde — die test start echte git-processen). - `make check-secrets`: geen lekken. `make sast`: 0 bevindingen. - Elke bewering in de nieuwe sectie tegen de code nagelopen: standaard uit, alleen desktop, geen eigen headers, instelbare basis-URL. Eén ding klopte niet in mijn eerste versie — ik schreef *Settings → Standards* voor de lokale database terwijl die onder **Security** staat; gecorrigeerd vóór de commit. ## Wat hierna nog van #579 overblijft Niets in deze repo. De publicatie van het logbeleid van `cveapi.librekat.nl` ligt bij de stichting, net als de websitehelft van #597. Ik stel voor het issue te sluiten en dat als apart punt te laten staan als je dat wilt volgen. Closes #579
docs(privacy): benoem de ene server die de uitgever zelf draait (#579)
Some checks failed
CI / Gate (Linux) · Format · Analyze · Coverage (push) Failing after 27s
CI / Docs links (push) Failing after 29s
CI / Web hardening (push) Failing after 30s
CI / Supply-chain (Trivy · advisory) (push) Failing after 22s
CI / Gate (Linux) · Format · Analyze · Coverage (pull_request) Failing after 23s
CI / Web hardening (pull_request) Failing after 23s
CI / Docs links (pull_request) Failing after 21s
CI / Supply-chain (Trivy · advisory) (pull_request) Failing after 29s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Test (macos-latest) (pull_request) Has been cancelled
CI / Test (windows-latest) (pull_request) Has been cancelled
78014f94b5
`PRIVACY.md` opende met "no OciDeck server" en `COMPLIANCE.md` zei dat de
stichting OciDeck niet als dienst host. Ondertussen staat
`cveapi.librekat.nl` — een CVE-spiegel van diezelfde stichting — als standaard
in `settings.dart`. Verderop stond hij netjes in de tabel, maar de samenvatting
is de alinea die mensen lezen, en dit is precies de zin die een kritische lezer
als eerste natrekt.

**Waarom dit meer tekst kreeg dan een tabelregel.** Wélk lek je opzoekt is
zelden neutraal: wie een specifieke kwetsbaarheid zoekt werkt meestal aan een
specifiek systeem, vaak voor een specifieke klant, vaak vóór het openbaar is.
De code zegt dat waar de functie woont (`cve_picker.dart`); de privacyverklaring
zei het nergens.

Wat er nu staat, en het is allemaal uit de code na te lopen: het exacte verzoek,
dat de zoekterm als **query-parameter in de URL** meegaat — het deel dat elke
gewone webserver standaard in zijn toegangslog schrijft — dat de stichting
verwerkingsverantwoordelijke is, waar rechten op inzage en verwijdering liggen,
en drie manieren om de spiegel te vermijden (uit laten is de standaard, de
lokale database, of je eigen spiegel).

**Wat er bewust niet staat: bewaartermijnen.** Welke velden die server bewaart
en hoe lang is een eigenschap van een installatie, niet van de code, en deze
repo kan het niet vaststellen. Er staat nu met zoveel woorden dát dit de grens
is en dat de stichting het apart moet publiceren. Een verzonnen bewaartermijn in
een privacyverklaring is erger dan een benoemd gat.

Onderweg gecorrigeerd: "there is no OciDeck-held copy of your data to request or
erase" — waar voor je decks, onwaar voor die ene dienst.

**De poort.** Zolang de code een host van de uitgever als standaard declareert,
moeten beide documenten die host noemen, moet PRIVACY.md een
verwerkingsverantwoordelijke aanwijzen, en mogen de twee absolute claims er niet
staan. Wordt de standaard ooit een host die niet van de uitgever is, dan vervalt
de eis vanzelf.

Eén ding moest die poort leren: deze repo citeert in een correctienotitie
bewust de oude, onware zin — zo vind je later terug wat er stond. Een poort die
op de kale zin zoekt bestraft dus precies de correctie die hij afdwingt.
Cursieve correctieblokken tellen daarom niet mee. In drie richtingen getoetst:
elke claim teruggezet maakt hem rood, en de hostnaam weghalen ook.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit a7a07f2090 into main 2026-07-22 20:29:24 +00:00
Sign in to join this conversation.
No description provided.