← EnergyView

Fase 4 — beveiliging zonder nieuwe datastromen

API

Framing en Home Assistant

Een standaard frame-ancestors 'self' zou een bestaande HA-kaart met een elders gehoste app onmiddellijk blokkeren. Daarom geen algemene framingbeperking standaard geactiveerd. Expliciete buildoptie:

ENERGYVIEW_FRAME_ANCESTORS="self https://jouw-ha.example:8123" npm run build:pages
ENERGYVIEW_FRAME_ANCESTORS="self https://jouw-ha.example:8123" npm run build:worker

Alleen exacte http(s)-origins; geen wildcard/pad/injecteerbare CSP. De policy is identiek in Pages en Worker. Voor een zelfstandige publieke installatie is self aanbevolen; voor hosted HA alle gebruikte HA-origins expliciet toevoegen. Dit is een voorstel met veilige opt-in, geen claim dat het standaard-clickjackingrisico is opgelost. Lokale HA-bestanden krijgen hun HTTP-headers van HA zelf.

parentOrigin in de query wordt niet langer vertrouwd. De app controleert het directe parent-window, een browsergeleverde referrer/same-origin, of een willekeurige sessienonce die de bijgewerkte HA-kaart terugstuurt. Met verborgen referrer gaat alleen een ready-type + willekeurige nonce naar de parent met *; geen meetwaarden. De antwoord-origin wordt gepind. Verkeerde/opaque origins en andere windows afgewezen. Oude kaarten blijven werken met een bruikbare browserreferrer of same-origin; bij verborgen referrer én cross-origin moet ook ha-card.js worden bijgewerkt. Gebruik van getRandomValues werkt ook op normale lokale HTTP-HA-installaties (randomUUID zou daar ontbreken).

De vier bestaande numerieke sensorwaarden en hun eindigheids-/periodecontrole blijven gelijk. Het oorspronkelijke risico betrof vooral het beïnvloeden van deze instellingen door een embedder; geen uitbreiding naar accountovername of toegang tot CSV-bestanden. Een nonce machtigt de daadwerkelijke embedder, geen willekeurige site als vertrouwde organisatie; gebruik het optionele framebeleid voor die beperking.

PVGIS

Actieve route gebruikt PVGIS 6. Alleen de geëxporteerde legacy-normalizer voor het oude payloadformaat vermeldde hardcoded 5.3; die zegt nu PVGIS · Europese Commissie / JRC (oud gegevensformaat). Bestaande opgeslagen schattingen worden niet herschreven en behouden hun provenance. Geen cijfers gewijzigd.

Verificatie

Nieuwe regressies voor begrensde bodies (ook ontbrekende/vervalste lengte), ongeldige JSON, rate limiting zonder IP, JSON-marktprijsfouten, parent-handshake en opt-in framebeleid. Defaults behouden HA-framing. Geen echte Home Assistant-installatie beschikbaar: protocol- en bouwtests zijn geen volledige HA-browserintegratietest.

Volledige fasecontrole: 184/184 tests geslaagd; formatcontrole groen, geen nieuwe ESLint/checkJs-diagnosegroepen. Golden master opnieuw alle acht scenario's groen. Deployment-source-test groen. Nieuwe request-guards/protocoltests slagen; deze zeggen niets over de beschikbaarheid van echte providers. Browser: startpagina en gasformulier daadwerkelijk geopend, geen volledige HA-installatie of throttled-browsermeting beschikbaar.

Slotcontrole: ook de daadwerkelijk gebouwde, geminimaliseerde reportworker slaagt voor alle acht golden-scenario’s (zelfde toleranties/identiteiten).