Ökad säkerhet med CSP

Nätet används inte bara av trevliga och ärliga människor som du och jag. Där ute finns också en hel del folk som vill komma över värdefulla och känsliga uppgifter som dina besökare hanterar din webbplats. Det kan vara användarnas lösenord, saldot på kontot eller e-postadresser. För att komma över de här uppgifterna används olika tekniker. En av teknikerna är Cross Site Scripting (XSS). För att minska risken för att besökarna på din webbplats utsätts för ett angrepp via XSS kan man tillämpa en Content Security Policy (CSP) som anger för webbläsaren hur information och kod på webbplatsen får hanteras.

Med en Content Security Policy kan du t.ex. ange varifrån JavaScript, bilder och CSSer får hämtas. Du har också möjlighet att begränsa vilka webbplatser som får exponeras via iFrames eller var webbläsaren kan ansluta via XHR, WebSockets och EventSource. CSP ger också möjlighet att ange om plugins som t.ex. Flash får laddas på sidan. CSP stödjs av de flesta moderna webbläsare (med undantag för Internet Explorer…).

CSP och Google Analytics

Om man använder en Content Security Policy på en webbplats som använder Google Analytics behöver man i policyn ange att Google Analytics spårningscript (JavaScript) får hämtas från www.google-analytics.com samt att bilder (vilket krävs för att data ska kunna samlas in av Google Analytics) får hämtas från www.google-analytics.com.

Med en Content Security Policy på webbplatsen kommer inte inline-JavaScript tillåtas köras. Det gör att spårningsscriptet för Google Analytics, som normalt ligger i en script-tag på alla sidor på webbplatsen, behöver ligga i en separat JS-fil. Se detta exempel på en sida som använder CSP och Google Analytics. Policyn för sidan i exemplet tillåter att script och bilder bara får hämtas från den egna webbplatsen samt från www.google-analytics.com. Innehåll genom iFrames får endast visas från den egna webbplatsen och inga objekt (t.ex. Flash) tillåts laddas oavsett var de är lagrade.

CSP och Google Tag Manager

En webbplats som använder Google Tag Manager (GTM) kan använda CSP för att avgränsa vilka script som får hanteras genom GTM och vart dessa får skicka data. För att Google Tag Manager ska fungera måste dock inline-JavaScript tillåtas köras vilket kan tillåtas genom policyn (m.h.a. ‘unsafe-inline’). I detta exempel hanteras Google Analytics spårningskod via Google Tag Manager. Policyn på sidan tillåter att JavaScript som levereras från den egna webbplatsen, www.googletagmanager.com och www.google-analytics.com får köras. Eftersom GTM renderar en iFrame på sidan behöver www.googletagmanager.com tillåtas visa innehåll via iFrame.

Policyn för webbplatsen (eller den specifika sidan) skickas med från servern i HTTP-headern. Att använda en CSP gör inte din webbplats osårbar för skadlig kod det men är ett bra sätt att höja säkerheten för de besökare som som använder webbläsare som stödjer Content Security Policy.

Här kan du hitta mer utförlig introduktion till Content Security Policy.