Siirry pääsisältöön

Content Security Policy (CSP)

Tässä ohjeartikkelissa kuvaamme miten CSP toimii ja kuinka voit hyödyntää sitä parantamaan sivustosi tietoturvaa.

Content Security Policy (CSP) on HTTP-vastausotsake (header), jolla määritellään selaimelle sallitut resurssit (kuten skriptit, tyylit ja kuvat). CSP estää luvattoman koodin suorittamisen käyttäjän selaimessa ja suojaa sivustoa Cross-Site Scripting (XSS)- ja Clickjacking-hyökkäyksiltä.

Ehkäistävät tietoturvariskit

  • Cross-Site Scripting (XSS): Hyökkääjä yrittää ajaa haitallista JavaScript-koodia käyttäjän selaimessa. CSP estää tuntemattomista lähteistä ladattavien skriptien suorituksen.

  • Clickjacking: Hyökkääjä upottaa sivustosi näkymättömään kehykseen (iframe) huijatakseen käyttäjän klikkauksia. CSP rajoittaa sivuston upottamista ulkopuolisille verkkosivuille.

Oletusasetukset Seravolla

Seravon nginx-ympäristössä on oletuksena käytössä perustason CSP-ohjaus tiedostossa /data/wordpress/nginx/security.conf:

add_header Content-Security-Policy "upgrade-insecure-requests";

Tämä sääntö ohjaa selaimen hakemaan kaikki suojaamattomat (HTTP) resurssit automaattisesti suojatun (HTTPS) yhteyden yli.

Miten CSP otetaan turvallisesti käyttöön

Liian tiukat CSP-säännöt voivat rikkoa sivuston ulkoasun tai toiminnallisuudet. Käyttöönotto kannattaa tehdä vaiheittain:

  1. Testaa sääntöjä raportointitilassa

    Määritä säännöt testitilassa (Content-Security-Policy-Report-Only). Tällöin selain ei estä resursseja, vaan raportoi mahdolliset virheet selaimen kehittäjätyökalujen konsoliin (F12).

    Lisää säännöt tiedostoon /data/wordpress/nginx/security.conf:

    add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;";

  2. Mittaa ja korjaa virheet

    Selaa sivustoa ja varmista selaimen kehittäjätyökaluista (Console-välilehti), ettei aiheettomia CSP-varoituksia synny.

  3. Aktivoi CSP-suojaus

    Kun säännöt on todettu toimiviksi, muuta otsakkeen nimi muotoon Content-Security-Policy:

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;";

Muista käynnistää nginx uudelleen komennolla wp-restart-nginx muutosten jälkeen. Voit varmistaa myös sääntöjä ensin komennolla wp-restart-nginx --test.

Yleisimmät CSP-direktiivit

  • default-src: Oletussääntö resurssityypeille, joille ei ole määritelty omaa sääntöä.

  • script-src: Määrittelee sallitut JavaScript-lähteet.

  • style-src: Määrittelee sallitut CSS-tyylitiedostot.

  • img-src: Määrittelee sallitut kuvalähteet.

  • frame-ancestors: Estää sivuston upottamisen muille sivustoille (suojaa Clickjackingilta).

WordPress-erityishuomiot

WordPressin ydin, monet lisäosat sekä sivunrakentajat (kuten Elementor) luottavat sisäisiin skripteihin ja tyyleihin (inline scripts/styles).

  • script-src- ja style-src-direktiiveissä täytyy usein WordPress-ympäristössä käyttää määritettä 'unsafe-inline'.

  • Jos sivustolla käytetään dynaamisesti luotavia skriptejä, myös 'unsafe-eval' voi olla tarpeen.

Asetusten testaaminen

Voit tarkistaa palvelimen lähettämät aktiiviset HTTP-otsakkeet esimerkiksi komennolla:

curl -I https://esimerkki.fi

Tarkista tulosteesta content-security-policy-rivin sisältö varmistaaksesi, että nginx näyttää halutut säännöt.

Lue lisää CSP:stä

Voit lukea lisää CSP:stä ja sen käyttöönotosta esimerkiksi Mozilla-säätlön kehittäjädokumentaatiosta (englanniksi).

Tutustu myös alkuperäiseen blogikirjoitukseen Seravon nettisivuilla!

Vastasiko tämä kysymykseesi?