Erik Hendriks

Python Web Development

hacker emblem

Content Security Policy



Gepubliceerd op 4 Februari, 2017

Content Security Policy (CSP) is een computer beveiliging standaard geïntroduceerd om cross-site scripting (XSS), clickjacking en andere aanvallen waar kwaadaardige code in websites wordt geïnjecteerd tegen te gaan. CSP is een methode voor website eigenaren om aan te geven vanaf welke bron een browser inhoud mag laden voor een website. Er zijn meerdere “directives” die je kunt configureren, o.a. JavaScript, CSS, HTML frames, fonts, images, media, embeddable objects, sandbox en een rapporteer functie.


1. Voorbeelden voor CSP configuratie via de meta tag:


Je kunt de CSP directives op verschillende manieren declareren:
1. Via een meta tag in de head van de html code.
2. Configureer Apache Webserver.


<meta http-equiv="Content-Security-Policy" content="default- src 'none'">

<meta http-equiv="Content-Security-Policy" content="script- src 'self' www.google-analytics.com adserver.voorbeeld.com">

<meta http-equiv="Content-Security-Policy" content="style- src 'self' www.voorbeeld.com">


Het eerste gedeelte van de tag is voor de hand liggend, vanaf "content" kun je directives ingeven en hun parameters. Het eerste voorbeeld is de default directive en dient als een fallback vorr de andere directives, bijvoorbeeld:



Content-Security-Policy: default-src 'self'


is het gelijk aan:



Content-Security-Policy: connect-src 'self'; font-src 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src 'self'; style-src 'self'; worker-src 'self'

Het tweede en derde voorbeeld zijn voor, je hebt het vast al geraden, scripts en style-sheets en hebben als parameter ‘self’ en een aantal domeinen zoals Google Analytics en een server voor bijvoorbeeld advertenties. Hier kun je meer bronnen toevoegen die je wilt whitelisten voor je CSP.

Animated chip

2. Voorbeeld voor CSP configuratie via Apache Webserver:

Eerst zul je mod_headers moeten aanzetten, als je Fedora gebruikt hoef je hiervoor niets te doen het staat aan bij default. Voor Ubuntu/Debian kun je de volgende commando's uitvoeren om mod_headers aan te zetten en je server te herstarten.

sudo a2enmod headers

sudo apache2 -k restart


Zodra je hebt herstart zonder errors kun je het volgende bestand aanpassen:



/etc/apache2/conf-enabled/security.conf


Note: Linux varianten hebben verschillende locaties voor apache bestanden.



# Setting this header will prevent MSIE from interpreting # files as something else than declared by the content # type in the HTTP headers. # Requires mod_headers to be enabled. #Header set X-Content-Type-Options: "nosniff" # Setting this header will prevent other sites from # embedding pages from this site as frames. This defends # against clickjacking attacks. # Requires mod_headers to be enabled. Header always set X-Frame-Options:"sameorigin" Header always set X-Content-Type-Options nosniff Header always set X-XSS-Protection "1; mode=block" Header always set X-Permitted-Cross-Domain-Policies "master-only" Header always set Cache-Control "no-cache, no-store, must-revalidate" Header always set Pragma "no-cache" Header always set Expires "-1" Header always set Content-Security-Policy: "default-src 'none';" Header always set Content-Security-Policy: "script-src 'self' www.google-analytics.com ad.server.nl www.erikhendriks.be;" Header always set Content-Security-Policy: "style-src 'self' www.erikhendriks.be;"


Dit is het onderste gedeelte van het bestand, alleen de onderste drie headers zijn van CSP en doen hetzelfde als de eerder beschreven meta tag aanpak. Als je toch bezig bent zou je ook een blik kunnen werpen op de andere header settings. Elke keer dat je aanpassing maakt aan een apache2 configuratie bestand restart je de apache2 service zoals hierboven beschreven.

Als je de Apache Webserver succesvol hebt herstart zul je merken dat bijvoorbeeld al je inline code en scripts niet meer werken, je kunt dit omzeilen door 'unsafe-inline' parameters toe te voegen in plaats van ‘self’… Dit is wel een heel slechte oplossing en zou alleen tijdelijk gebruikt moeten worden. Beter kopieer je al je CSS en scripts naar aparte bestanden en voeg je deze toe aan de CSP whitelist

Om te checken of alles naar behoren is geconfigureerd kun je bijvoorbeeld google chrome developer tools gebruiken. Als je de pagina laadt kunnen er in de console errors verschijnen, zoals deze:

content security policy error voorbeeld

In dit voorbeeld kun je simpelweg deze parameter uit het error bericht kopiëren 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' en toevoegen aan je style-src directive in je security.conf file.


Contact

I'd Love To Hear From You.

Sending...
Sending...
Where am i

Hazelbos 3
2650 Edegem
Belgium