Je website beveiligen met SRI en CSP

Het internet, en het name het World Wide Web (www), was nooit ontworpen met het oog op veiligheid. Alle aanvullende veiligheidsprotocollen die we kennen zijn eigenlijk later toegevoegd. Zo is de HTTPS-verbinding die we kennen als ‘het groene slotje’ pas de laatste jaren gemeengoed geworden. Tegenwoordig zijn er vele andere manieren om je website te beveiligen.

Kwaadwillenden vinden steeds nieuwe manieren om hun doel te bereiken. Daarop worden steeds nieuwe manieren gevonden om dit te mitigeren. We zien de laatste jaren een opkomst van JavaScript, Single Page Applications (SPA’s) en FrontEnd frameworks zoals Angular en React om snelle, interactieve en mooie websites en webapplicaties te bouwen. Vanzelfsprekend dienen deze technieken op een juiste en vooral veilige manier toegepast te worden. Echter zien we dat dit nog regelmatig misgaat. Het meest sprekende voorbeeld hiervan is de campagnewebsite van voormalige president Donald Trump. Deze bevatte een dusdanig groot ‘lek’ dat verregaande consequenties had kunnen hebben indien dit misbruikt zou zijn. Beveiligingsonderzoeker Troy Hunt heeft er deze mooie blogpost aan gewijd.

In deze blog beschrijven we twee technieken om je website te beveiligen, namelijk Subresouce Integritity (SRI) en Content Security Policies (CSP). Deze technieken zijn de afgelopen jaren ontwikkeld en worden momenteel ondersteund door het overgrote merendeel van de browsers zoals Firefox, Edge, Chrome, Opera en Safari. Helaas zien we dat deze technieken nog niet consequent worden geïmplementeerd in websites en webapplicaties.

Subresource Integrity (SRI)

Stel je voor dat je een nieuwe website maakt en hiervoor wil je functionaliteit gebruiken die door een derde partij beschikbaar wordt gemaakt, bijvoorbeeld voor een nieuwsbrief. Met JavaScript kan dat vaak eenvoudig door het opnemen van een stukje code zoals in het voorbeeld hieronder:

<script src="https://www.
SomeOtherParty.com/NewsLetter/embed.js"
type="text/javascript"></script>

Zoals je kunt zien maken we gebruik van een JavaScript bestand genaamd embed.js afkomstig van SomeOtherParty. Maar wat kan er nu gebeuren wanneer SomeOtherParty mijn bedrijf niet gezind is, of wanneer SomeOtherParty wordt gehackt? Dan kan het bestand embed.js worden
misbruikt om slechte code uit te voeren zoals een keylogger of cryptominer. Iedere bezoeker van jouw website zou dan worden blootgesteld aan deze slechte code zonder dat jij het door kan hebben.

Met de mitigerende maatregel SRI creëer je een digitale vingerafdruk van een bestand. Er wordt een cryptografische berekening uitgevoerd en op het moment dat het bestand zou wijzigen in de toekomst wordt voorkomen dat de gewijzigde code wordt uitgevoerd. Voor het genereren van deze digitale vingerafdruk zijn talloze websites en applicaties beschikbaar. Ik gebruik meestal de SRI Generator van Report-URI: https://report-uri.com/home/sri_hash

<script
src="https://www.SomeOtherParty.com/NewsLetter/embed.js"
type="text/javascript" integrity="sha256-
z2gyg8OpoUm1c8wqrYKqR63Hm87PC5MTa6NwpzDMEJ0= sha384-
Bnd++T0hmJJIB1RlfM20nAZfWAamM5jM8iQ/PMkQnUibNc1f14J2gqS9YQ9xS
G3q sha512-2URiUcHGmY2tyMuEhs/cYmsnkDyjSZF6DgtPiHy+N2wProrZssl9UxhBp1g0X
mq9w/P2QM6zbQOqgVB9xqwTSQ==></script>

Het gebruik van SRI heeft wel consequenties voor je website. Wanneer SomeOtherParty bijvoorbeeld besluit om een nieuwe release van hun nieuwsbrief functionaliteit aan te bieden, kan dit gevolgen hebben voor de functionaliteit op jouw eigen website.

Content Security Policies (CSP)

Een andere maatregel om je website of webapplicatie te beveiligen tegen slechte code is door gebruik te maken van zogenaamde Content Security Policies (of CSPs). Met een CSP kan worden bepaald welke bronnen worden vertrouwd als bron voor afbeeldingen, JavaScript code, stijl-bestanden, etc. CSP is geen alternatief of vervanging voor SRI. Door beide technieken te combineren maak je het kwaadwillenden al zeer moeilijk om slechte code uit te voeren op jouw website. Zo biedt CSP een prima eerste defensie-linie tegen Cross Script Scripting (XSS).

Een CSP begint met een header, een stukje additionele informatie, die door de webserver wordt meegestuurd naar de bezoeker van de website. Bijvoorbeeld:

Content-Security-Policy: default-src 'none'; script-src
'self' https://www.SomeOtherParty.com

Deze header beschrijft dat (Java)script bestanden enkel vertrouwd worden indien deze geladen worden vanuit de website zelf (script-src 'self') of vanuit SomeOtherParty. Andere JavaScript bestanden worden niet vertrouwd en dus niet uitgevoerd. Net zoals bij SRI zijn er websites en applicaties beschikbaar om deze CSP header te genereren, waaronder https://report-uri.com/home/generate.

Tot slot

De beschreven technieken SRI en CSP zijn geen silver bullit om je website te beveiligen, maar vormen een goede aanvulling op de reeds bestaande maatregelen die je waarschijnlijk al getroffen hebt. Wil je meer weten over SRI, CSP of over (cyber)security in het algemeen, neem dan gerust contact met ons op.