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

Palveluiden toteuttajia varten on laadittu englanninkielinen ohjesivu, jota päivitetään tarpeen mukaan. Linkin ohjesivulle voi jakaa järjestelmäntoimittajille ja muille teknisille tahoille.

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:

  1. Joissain tilanteissa 'strict-dynamic' ratkaisisi skriptiketjun lataamisen, mutta se ei toimi esim. Applen Safari-selaimella.
  2. 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:

Content Security Policy: Ohitetaan "'unsafe-inline'" script-src:ssä tai style-src:ssä: nonce-source tai hash-source määritetty

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







  • No labels