Sisällysluettelo
Johdanto
Finnassa on Content Security Policy (CSP), joka määrittää, mitä skriptejä ja ulkoisia sisältöjä selain suostuu lataamaan. Näiden sääntöjen tarkoituksena on ehkäistä mahdollisten haavoittuvuuksien (esim. XSS) hyödyntämismahdollisuuksia. Tämän seurauksena mitä tahansa skriptiä ei sallita suoritettavaksi eikä esim. iframe:a voi ladata mistä vain.
Finnan CSP määritellään contentsecuritypolicy.ini-tiedostossa. Tiedostoa on mahdollista muokata paikallisesti tarpeen mukaan omia lisäyksiä varten. Muokkauksessa on kuitenkin oltava huolellinen, eikä liian laajoja oikeuksia tule sallia.
Vaikutusalue
Finnan oletussäännöt riittävät Finnan sisäiselle toiminnallisuudelle. Sääntöjen muokkausta tarvitaan, jos näkymässä näytetään ulkoista sisältöä. Ulkoista sisältöä ovat mm.
- Chat-upokkeet
- Facebook-sivut
- Kirjastokartta
- Kirjastot.fi:n upokkeet
- Twitter-feedit
- Vimeo- ja YouTube-videot
Uudet toiminnot
Uusien Finnaan upotettavien toimintojen osalta suosittelemme huolehtimaan siitä, että CSP-sääntöihin ei tarvitse tehdä laajoja avauksia. Erityisesti pitäisi välttää seuraavia sääntöjä:
- unsafe-eval (eval-komentoa pitäisi välttää)
- unsafe-hashes
- unsafe-inline (toiminto ei saa edellyttää inline-skriptejä)
- strict-dynamic (näppärä, mutta ei toimi Safari-selaimessa)
Ohjesivu järjestelmien toteuttajille
Content Security Policy -sääntöjen määrittäminen
Finnassa on oletuksena melko tiukat säännöt, jotka sallivat lähinnä sellaisten skriptien lataamisen, joissa script-tagissa on oikea nonce. Näitä sääntöjä voi laajentaa omilla säännöillä local/config/vufind/contentsecuritypolicy.ini
-tiedostossa. Pohjaksi kannattaa kopioida contentsecuritypolicy.ini.sample
-tiedosto, joka sisältää esimerkkisääntöjä useille chat-palveluille ym. ulkoisille lähteille. Eli kopioi contentsecuritypolicy.ini.sample
nimelle contentsecuritypolicy.ini
, ja tee muutokset tiedostoon contentsecuritypolicy.ini
. Poista puolipiste niiden sääntöjen edestä, joita haluat käyttöön (kommenttirivejä lukuunottamatta!).
Ulkoisia palveluita ei ole sallittu oletuksena, koska lista on sen verran pitkä, että se kasvattaisi jokaisen Finnan HTTP-vastauksen otsikkotietoja huomattavasti. Samasta syystä on hyvä pitää oman näkymän säännötkin mahdollisimman suppeina.
Sääntöjä laadittaessa on huomioitava lisäksi seuraavat seikat:
- Joissain tilanteissa 'strict-dynamic' ratkaisisi skriptiketjun lataamisen, mutta se ei toimi esim. Applen Safari-selaimella.
- CSP on suunniteltu niin, että uudemmat säännöt yliajavat vanhemmat säännöt selaimilla, jotka tukevat niitä. Näin ollen esim. 'strict-dynamic'-sääntö poistaa käytöstä sivustokohtaiset osoitteet.
Sääntöjen toiminnan varmistaminen
Tarkista aina muutosten jälkeen, että näkymä toimii oikein.
Ainakin Chrome- ja Firefox-selaimilla voi selaimen kehittäjän työkaluihin kuuluvalla konsolilla tms. työkalulla nähdä mahdolliset virheilmoitukset. Oikea kohta löytyy siis avaamalla Kehittäjän työkalut (Developer tools) ja sieltä Konsoli-välilehden (Console). Valikko, josta kehittäjän työkalut löytyvät, vaihtelee kuitenkin selaimesta ja käyttöjärjestelmästä riippuen. Lisätietoja löytyy Firefoxin ohjeesta ja Chromen ohjeesta.
Huom! Keltaisella näkyvistä varoituksista ei tarvitse huolestua. Esim. seuraava ilmoitus kertoo vain, että selain jättää huomiotta sääntöjä, jotka on sisällytetty vanhempia selaimia varten:
Seuraavassa kuvassa on esimerkki-ilmoitus siitä, että skripti ei saa ladattua toista skriptiä:
Lisätietoa aiheesta
https://vufind.org/wiki/administration:security:content_security_policy (VuFindin ohje)
https://content-security-policy.com/
https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html
https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy