security(web): lever de beveiligingsheaders mee als web/.htaccess (#849) #857
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!857
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/849-web-security-headers"
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?
Sluit #849.
Wat
Een ZAP-scan tegen de live host meldde zeven ontbrekende responseheaders met één oorzaak: de statische host (Apache) stuurde er geen. CSP en Referrer-Policy zaten al als
<meta>in de pagina, maarframe-ancestors, HSTS,X-Frame-OptionsenPermissions-Policydwingt een browser alléén als échte header af.web/.htaccesszet die headers;flutter build webkopieert hem mee naarbuild/web(de WebReleaseBundle-kopieerstap filtert dotfiles niet, enpack_web_releaseneemt hem vialistSyncautomatisch in SHA256SUMS op). De hardening reist zo mét de bundel in plaats van los in serverconfig te leven.Bewuste keuzes op de sticky headers
max-age=63072000; includeSubDomains, zonderpreload(de sticky, moeilijk terug te draaien keuze). Sluit aan op wat HOSTING.md §3 en BUILD.md al voorschreven.require-corp, ZAP 90004): bewust niet meegeleverd — kan cross-origin resources breken en vraagt eerst een test.main.dart.js, niet uit commentaar.Regressiepoort
test/web_htaccess_headers_test.dart(draait ondermake check): de header-CSP is byte voor byte gelijk aan de meta-CSP, en elke header-only-hardening staat er met de conservatieve waarde.tool/check_web_hardening.dart(op de gebouwde bundel,make check-web): bewijst datflutter build webde dotfile écht meekopieert en dat de header-CSP de meta-CSP spiegelt.Poorten
make check: groen (6607 tests, coverage 86,6%, per-file floor 0).make check-secrets: schoon (gitleaks: no leaks; trufflehog: 0).make sast(semgrep, lokale regels): 0 findings..htaccess-headers manifesteren zich pas op een échte Apache-host — een lokale ZAP tegenpython3 -m http.serverzou ze niet zien. Validatie hoort bij de post-deploy-DAST (#850) tegen de live host, ná uitrol.Bewaker
Bewust overgeslagen: geen wijziging aan bestandsformaat, opslag, afhankelijkheid of een nieuwe vertrouwde partij. Het is defensieve hardening; de docs (HOSTING/BUILD/CHANGELOG) beschrijven alleen de meegeleverde headers, consistent met de reeds bestaande HOSTING.md §3.
Voorwaarde op de host
.htaccesswerkt alleen metmod_headersaan énAllowOverridedieFileInfo/Alltoestaat. StaatAllowOverrideuit, dan horen dezelfde regels in de vhost — gedocumenteerd in HOSTING.md §3 en BUILD.md.