Har du styr på din CSP: Javascript

Med alle de angreb der har været hvor fremmed Javascript har aflyttet indtastninger af kreditkortoplysninger (og alt andet), så er det nærliggende at snakke lidt om CSP.

CSP - Content Security Policy er et simpelt direktiv der fortæller browseren hvordan indholdet på vores hjemmeside skal serveres. Fx. Kan du lave en CSP der kræver at denne side bliver vist over HTTPS, (Og resten er så op til dine redirects at få det frem), men der er også de helt basale, der angiver hvordan browseren må loade javascript. 

Fx. Så (ifølge vores CSP) tillader vores side (sitemon360.io) at der KUN kan benyttes interne javascript filer, (fx. scripts/sitemon360.js) samt browseren også gerne må hente Googles Js filer (analytics + tagmanager) samt facebooks JS filer.

Det er gjort ved at definere en script-src csp der der består af nedenstående.

script-src 'self' *.googletagmanager.com connect.facebook.net;

På den måde er vi helt sikre på, at hvis der var nogle der skulle snige et script tag ind i vores html et sted, (det kunne være en bug i CMS systemet eller lignende der kunne tillade den slags), så kan den fremmede Javascript ikke hentes alligevel.

Vores CMS system er baseret på Umbraco der er .net baseret og kører på en IIS, og derfor har vi blot sat vores CSP ind i web.config filen.

<system.webServer>
   <httpProtocol>
    <customHeaders>
      <add name="Content-Security-Policy" value="script-src 'self' *.googletagmanager.com connect.facebook.net;" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

På en Apache webserver tilføjer man blot nedenstående til .htaccess filen.

Header set Content-Security-Policy "script-src 'self' *.googletagmanager.com connect.facebook.net;"

På den måde er man sikret der ikke bliver hentet noget som helst andet.

Bemærk at ovnenstående skal testes ret grundigt, da det helt sikkert breaker sitets funktionalitet hvis man nu er afhængig af scripts der ikke er angivet i cspen.

Har du brug for CSP?

Jeg talte med en udvikler forleden der sagde at det ikke var et issue, da de altid i deres løsninger åbnede et ny betalingsvindue hos betalingsudbyderen. Så langt så godt (Selvom det nu ser mere lækkert ud med betaling integreret på siden selv), - men udfordringen her er, at stort set al anden information du indtaster på siden, såsom email, navn og andre kontaktoplysninger vil kunne blive sendt til hvem som helst.

Så ja, du har helt sikkert brug for CSP, - det gør muligheden for Cross Side scripting angreb meget mindre.:).