SafeWebCore
Security headers middleware voor ASP.NET Core met strikte A+ baseline en nonce-gedreven CSP.
Bekijk op GitHubVerhaal achter het project
SafeWebCore is ontstaan uit 28+ jaar praktijkervaring met webapplicaties die onder echte druk moeten presteren. Inconsistentie in security headers tussen projecten leidde tot kwetsbare configuraties en auditproblemen. Het doel: een herbruikbare, strikte foundation die teams direct A+ security geeft zonder dat ze het wiel opnieuw hoeven uit te vinden. Gebouwd met dezelfde standaarden die we van klantprojecten verwachten.
Probleem dat dit oplost
Veel .NET-teams worstelen met fragmentarische header-configuratie. CSP, HSTS, COOP/COEP, Permissions Policy en Referrer-Policy worden per project anders ingesteld, vaak incompleet of met te veel uitzonderingen. Resultaat: zwakke A+ scores, XSS-risico's en onderhoudsproblemen wanneer browsers strenger worden. Zonder nonce-ondersteuning voor inline scripts/styles in Razor Pages is echte CSP onmogelijk zonder unsafe-inline.
Architectuur
Middleware + strongly-typed Options pattern met strikte defaults. Pad-gebaseerde policies voor uitzonderingen zonder de baseline te verzwakken. Nonce-integratie voor scripts en styles in Razor via SafeWebCore CSP nonce provider. Minimale runtime-overhead: headers worden één keer berekend en gecached per request.
graph TD
A[Request] --> B[NetSecureHeadersMiddleware]
B --> C{Path Policy?}
C -->|Match| D[Apply Strict Policy + Nonces]
C -->|No| E[Fallback to Baseline]
D --> F[Add CSP + HSTS + COOP/COEP]
E --> F
F --> G[Response]
Lessons learned
Security moet in de defaults zitten, niet in optionele configuratie. Goede DX en duidelijke validatie bepalen adoptie. Na 28 jaar zien we dat 'configureer het zelf' altijd leidt tot gaten. Door nonces, A+ defaults en Razor-integratie out-of-the-box te maken, wordt de veilige weg ook de makkelijkste weg. Geen jQuery, geen unsafe-inline, geen concessies.
Screenshots
Code snippets
// Program.cs / Startup - één regel voor A+ baseline
builder.Services.AddNetSecureHeadersStrictAPlus();
app.UseNetSecureHeaders();
// Razor Page met nonce (automatisch via Context)
<script nonce="@Context.GetCspNonce()">/* inline veilig */</script>
<style nonce="@Context.GetCspNonce()">/* inline styles veilig */</style>
// Custom path policy voorbeeld
options.PathPolicies.Add("/admin/*", new NetSecureHeadersOptions
{
ContentSecurityPolicy = "default-src 'self'; script-src 'self' 'nonce-{nonce}'",
PermissionsPolicy = "geolocation=(), camera=()"
});
Klaar om te gebruiken?
Bekijk de volledige broncode, documentatie en releases op GitHub. Open source onder MIT-licentie.
Bekijk op GitHub Bespreek integratie