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:
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:;";
Mittaa ja korjaa virheet
Selaa sivustoa ja varmista selaimen kehittäjätyökaluista (Console-välilehti), ettei aiheettomia CSP-varoituksia synny.
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- jastyle-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!
