cve fixes
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
# 1. Dependency-check (staan package.json's op de laatste versies?)
|
||||
# 2. Backend-tests (Dockerfile target 'test' → node --test, zonder database)
|
||||
# 3. Productiebuild (Vite-build + app-image; faalt de frontend, faalt dit)
|
||||
# 4. Smoketest (productie-image + postgres, /api/health en / opvragen)
|
||||
# 4. Imagescan (Trivy op het gebouwde image; OS- én npm-pakketten)
|
||||
# 5. Smoketest (productie-image + postgres, /api/health en / opvragen)
|
||||
#
|
||||
# De smoketest publiceert geen hostpoorten en gebruikt een eigen netwerk, dus
|
||||
# hij botst niet met een draaiende dev-stack.
|
||||
@@ -14,14 +15,17 @@
|
||||
# .\test.ps1 # alle stappen
|
||||
# .\test.ps1 -Unit # dependency-check + backend-tests
|
||||
# .\test.ps1 -NoSmoke # zonder de stack te starten
|
||||
# .\test.ps1 -Strict # faal als een dependency achterloopt
|
||||
# .\test.ps1 -Strict # faal als een dependency achterloopt; scan ook op
|
||||
# # MEDIUM en LOW in plaats van alleen CRITICAL/HIGH
|
||||
# .\test.ps1 -SkipDeps # dependency-check overslaan (bijv. offline)
|
||||
# .\test.ps1 -SkipScan # imagescan overslaan (bijv. offline)
|
||||
|
||||
param(
|
||||
[switch]$Unit,
|
||||
[switch]$NoSmoke,
|
||||
[switch]$Strict,
|
||||
[switch]$SkipDeps
|
||||
[switch]$SkipDeps,
|
||||
[switch]$SkipScan
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
@@ -43,7 +47,7 @@ function Write-Step {
|
||||
# Vergelijkt de versies in frontend/ en backend/package.json met het
|
||||
# npm-register. Bewuste uitzonderingen staan in docker/update-exceptions.json.
|
||||
if (-not $SkipDeps) {
|
||||
Write-Step "[1/4] Dependency-check"
|
||||
Write-Step "[1/5] Dependency-check"
|
||||
|
||||
$checkArgs = @("node", "docker/check-updates.mjs")
|
||||
if ($Strict) { $checkArgs += "--strict" }
|
||||
@@ -59,11 +63,11 @@ if (-not $SkipDeps) {
|
||||
Write-Host "Let op: er zijn nieuwere versies beschikbaar (zie hierboven)." -ForegroundColor Yellow
|
||||
}
|
||||
} else {
|
||||
Write-Step "[1/4] Dependency-check overgeslagen (-SkipDeps)"
|
||||
Write-Step "[1/5] Dependency-check overgeslagen (-SkipDeps)"
|
||||
}
|
||||
|
||||
# ── 2. Backend-tests ──────────────────────────────────────────────────────
|
||||
Write-Step "[2/4] Backend-tests"
|
||||
Write-Step "[2/5] Backend-tests"
|
||||
docker build --target test -t $testImage $PSScriptRoot
|
||||
if ($LASTEXITCODE -ne 0) { Write-Error "Testimage bouwen mislukt"; exit 1 }
|
||||
|
||||
@@ -78,7 +82,7 @@ if ($Unit) {
|
||||
}
|
||||
|
||||
# ── 3. Productiebuild (inclusief Vite-build) ──────────────────────────────
|
||||
Write-Step "[3/4] Productie-image bouwen"
|
||||
Write-Step "[3/5] Productie-image bouwen"
|
||||
docker build --target production `
|
||||
--build-arg APP_VERSION=$appVersion `
|
||||
--build-arg VITE_APP_VERSION=$appVersion `
|
||||
@@ -87,13 +91,50 @@ docker build --target production `
|
||||
if ($LASTEXITCODE -ne 0) { Write-Error "Productiebuild mislukt"; exit 1 }
|
||||
Write-Host "Productie-image gebouwd: $prodImage" -ForegroundColor Green
|
||||
|
||||
# ── 4. Imagescan ──────────────────────────────────────────────────────────
|
||||
# Stap 1 kijkt naar de package.json's; deze kijkt naar wat er daadwerkelijk in
|
||||
# het image zit — de Alpine-pakketten en alles wat het base-image meelevert.
|
||||
# Dat onderscheid is niet theoretisch: bij de scan van 1.0.10 kwamen alle 39
|
||||
# bevindingen daarvandaan (OpenSSL in Alpine, en npm's eigen dependencies) en
|
||||
# geen enkele uit deze applicatie. Een dependency-check had er nul van gezien.
|
||||
#
|
||||
# --ignore-unfixed: alleen falen op iets waar een fix voor bestaat. Anders
|
||||
# blokkeert een CVE zonder patch je release zonder dat je er iets aan kunt doen.
|
||||
if (-not $SkipScan) {
|
||||
Write-Step "[4/5] Imagescan (Trivy)"
|
||||
|
||||
$trivyCache = Join-Path $env:USERPROFILE ".cache\trivy"
|
||||
New-Item -ItemType Directory -Force -Path $trivyCache | Out-Null
|
||||
|
||||
# Normaal blokkeren alleen CRITICAL en HIGH; -Strict trekt de lat naar alles.
|
||||
$ernst = if ($Strict) { "CRITICAL,HIGH,MEDIUM,LOW" } else { "CRITICAL,HIGH" }
|
||||
|
||||
# Uitvoer opvangen en alleen tonen als er iets is: Trivy print bij succes
|
||||
# een tabelregel voor élk schoon pakket, en dat is honderden regels ruis
|
||||
# waarin een echte melding juist wegvalt.
|
||||
$scanUit = docker run --rm `
|
||||
-v /var/run/docker.sock:/var/run/docker.sock `
|
||||
-v "${trivyCache}:/root/.cache" `
|
||||
aquasec/trivy:latest image `
|
||||
--scanners vuln --severity $ernst --ignore-unfixed --exit-code 1 --quiet `
|
||||
$prodImage 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
$scanUit | ForEach-Object { Write-Host $_ }
|
||||
Write-Error "Imagescan vond op te lossen kwetsbaarheden ($ernst)"
|
||||
exit 1
|
||||
}
|
||||
Write-Host "Imagescan schoon ($ernst)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Step "[4/5] Imagescan overgeslagen (-SkipScan)"
|
||||
}
|
||||
|
||||
if ($NoSmoke) {
|
||||
Write-Host ""
|
||||
Write-Host "Smoketest overgeslagen (-NoSmoke) — klaar." -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
# ── 4. Smoketest op het productie-image + postgres ────────────────────────
|
||||
Write-Step "[4/4] Smoketest (app + postgres)"
|
||||
# ── 5. Smoketest op het productie-image + postgres ────────────────────────
|
||||
Write-Step "[5/5] Smoketest (app + postgres)"
|
||||
|
||||
function Remove-SmokeStack {
|
||||
docker rm -f $smokeApp $smokeDb 2>$null | Out-Null
|
||||
|
||||
Reference in New Issue
Block a user