cve fixes
This commit is contained in:
@@ -2,6 +2,83 @@
|
||||
|
||||
## [Niet vrijgegeven]
|
||||
|
||||
### Beveiliging
|
||||
- **PostgreSQL 18.4 → 18.6.** Het `postgres:18-alpine` image dat in gebruik was
|
||||
dateerde van vier maanden geleden. Dat is een patch binnen dezelfde major, dus
|
||||
de data-directory blijft geldig en er komt geen dump/restore aan te pas — het
|
||||
volume blijft gewoon staan. De kwetsbaarhedenscan op het image gaat van 143
|
||||
naar 45 bevindingen, het grootste deel in de Alpine-pakketten eronder. Wat
|
||||
overblijft (1 kritiek, 21 hoog) zit allemaal in Go's `stdlib` v1.24.6 in een
|
||||
meegecompileerde binary; dat kan alleen upstream oplossen
|
||||
- `BEHEER.md` beschreef alleen de major-upgrade, met een `docker compose down
|
||||
-v` erin. Wie dat bij een patch-upgrade zou volgen, wist zijn database zonder
|
||||
dat het nodig is. De twee gevallen staan nu apart beschreven
|
||||
- **De imagescan staat op nul.** De scan van 1.0.10 gaf 39 bevindingen
|
||||
(1 kritiek, 12 hoog, 15 middel, 11 laag). Geen enkele kwam uit deze
|
||||
applicatie: twintig zaten in `libssl3` en `libcrypto3` (Alpine in het
|
||||
node-image liep achter op 3.5.8-r0) en negentien in de dependencies die npm
|
||||
zelf meelevert — `tar`, `pacote`, `sigstore`, `brace-expansion`, `picomatch`,
|
||||
`ip-address`. De eigen `ip-address` van de app stond al op 10.7.0 en was dus
|
||||
nooit het probleem
|
||||
- Het productie-image doet nu een `apk upgrade` aan het eind van de build. Het
|
||||
node-image wordt minder vaak herbouwd dan Alpine patches uitbrengt, dus
|
||||
OpenSSL loopt er structureel op achter
|
||||
- npm, npx, corepack en yarn gaan uit het productie-image. De container start
|
||||
met `node src/server.js` en gebruikt nooit een pakketbeheerder; ze zaten er
|
||||
alleen in omdat het base-image ze meelevert. Weg met de tool is weg met die
|
||||
hele categorie, ook bij de volgende ronde — npm's dependencies zijn een
|
||||
terugkerende bron van meldingen
|
||||
- Nieuwe teststap **[4/5] Imagescan** met Trivy, die het gebouwde image scant en
|
||||
faalt op CRITICAL of HIGH waarvoor een fix bestaat (`--ignore-unfixed`, want
|
||||
een CVE zonder patch hoort je release niet te blokkeren). `-Strict` trekt de
|
||||
lat naar MEDIUM en LOW, `-SkipScan` slaat hem over. Stap 1 kijkt naar de
|
||||
`package.json`'s en had geen van deze 39 gezien; deze kijkt naar wat er
|
||||
werkelijk in het image zit. `release.ps1` draait dezelfde scan vóór het
|
||||
pushen, dus een image met openstaande CVE's komt de registry niet meer in
|
||||
|
||||
### Toegevoegd
|
||||
- **Export naar HTML.** Onder Instellingen staat naast backup en restore nu
|
||||
"Exporteren naar HTML": één zelfdragend bestand met al je gegevens, bedoeld
|
||||
als laatste vangnet. Draait de app niet meer, is de database weg en ligt er
|
||||
geen backup, dan is dit bestand nog steeds te openen — in elke browser, op een
|
||||
computer zonder internet. Er zit niets van buiten in: opmaak staat inline,
|
||||
geen lettertypen, geen afbeeldingen, geen scripts
|
||||
- De pagina toont een samenvatting met de KPI's, en daaronder eigen vermogen en
|
||||
schulden per categorie met subtotalen en een eindtotaal, de voortgangstabel
|
||||
met verschil per moment, en de historie van EV en schuld. Bedragen staan met
|
||||
twee decimalen — anders dan het scherm, want dit is een archiefstuk waar de
|
||||
exacte waarde in hoort — rechts uitgelijnd met cijfers van gelijke breedte
|
||||
- **Het bestand is tegelijk een backup.** Onderin staat de complete ruwe data in
|
||||
een `<script type="application/json">`-blok dat de browser niet uitvoert en
|
||||
niet toont. "Backup herstellen" accepteert daarom nu naast de ZIP ook zo'n
|
||||
HTML-bestand. Eén bestand dat je zowel kunt lezen als kunt terugzetten
|
||||
- Uitvoer wordt zowel als HTML als binnen het JSON-blok ge-escaped. Een post die
|
||||
`Fonds <A> & co` heet, of een `</script>` in de gegevens, sloopt de pagina
|
||||
niet en breekt de ingebakken backup niet open
|
||||
- Nieuwe `utils/htmlExport.js`, met `leesHtmlBackup` voor de weg terug. Die
|
||||
gebruikt `DOMParser` en geen reguliere expressie: de gegevens kunnen van alles
|
||||
bevatten, en een parser die HTML echt begrijpt trapt daar niet in. Geen nieuwe
|
||||
dependency
|
||||
- De voortgangstabel is Datum plus één kolom per categorie plus vier vaste
|
||||
kolommen — bij zes categorieën twaalf stuks, en die passen op geen enkel
|
||||
scherm. De tabellen scrollen daarom horizontaal in plaats van kolommen buiten
|
||||
beeld te laten vallen. De datumkolom blijft daarbij staan, want zonder die
|
||||
kolom weet je niet meer naar welk moment je kijkt, en een schaduwrandje
|
||||
verschijnt aan de kant waar nog inhoud zit. Dat laatste is een CSS-truc met
|
||||
meeschuivende achtergronden: de pagina mag geen scripts bevatten, maar zonder
|
||||
hint ziet niemand dat er rechts meer staat. Op print vervalt het allemaal en
|
||||
wordt de tabel kleiner gezet, zodat alle kolommen op papier alsnog meekomen
|
||||
- De **initiële schuld** stond wel in de gegevens maar niet op de pagina. Hij
|
||||
hoort niet bij een schuldblok, dus zonder eigen regel viel hij buiten de
|
||||
export. Staat er nu onder de schuldentabel, met "afgelost sinds start" erbij
|
||||
- Stortingen op een **verwijderde categorie** blijven in oude voortgangsrijen
|
||||
staan, maar de app toont alleen kolommen van bestaande categorieën — die
|
||||
bedragen waren dus nergens meer te zien. De export geeft ze alsnog een kolom,
|
||||
gemerkt als `Verwijderd (c9)`. Voor een bestand dat alles moet bewaren wat je
|
||||
ooit hebt ingevoerd is stil weglaten het verkeerde gedrag
|
||||
|
||||
## [1.0.10] - 2026-09-17
|
||||
|
||||
### Opgelost
|
||||
- Het laatste label op de x-as viel over zijn buurman heen (`mei '26` en `26`
|
||||
over elkaar). De stap werd vanaf het begin van de reeks geteld en het laatste
|
||||
|
||||
Reference in New Issue
Block a user