Defaults.Exposed › Korjaukset › Content-Security-Policy (CSP)
Kuinka korjata Content-Security-Policy (CSP)
Content Security Policy on turvallisuussääntö, jonka verkkosivustosi antaa jokaisen kävijän selaimelle, kertoen sille tarkalleen, mitä koodia saa ajaa. Ilman sitä, jos haitallista sisältöä koskaan päätyy sivulle – kommenttikentän, hakkerointun lisäosaan tai kolmannen osapuolen skriptin kautta – selain ajaa sen vapaasti, mukaan lukien koodin, joka hiljaa skimmaa asiakkaidesi korttinumerot ja salasanat heidän kirjoittaessaan, lukon näkyessä silti.
Lyhyesti liiketoiminnallesi: Jos sivustoasi koskaan muutetaan, haitallinen koodi voi lukea asiakkaidesi maksukortteja ja kirjautumistietoja suoraan kassapisteestäsi, kaiken näyttäessä täysin normaalilta – jättäen sinut veloitusten peruutusten, petosvaatimusten, ilmoitettavan tietomurron ja tarkistusepäonnistumisen kanssa, jota suurempien asiakkaiden tietoturvatiimit käyttävät kaupan pysäyttämiseen tai tappamiseen.
Mitä tämä voi maksaa sinulle
- Piilotettu koodi liukuu yhdelle sivullesi haavoittuvaisen lisäosan tai vaarantuneen kolmannen osapuolen skriptin kautta. Jokainen korttinumero, nimi ja CVV, jonka asiakkaasi kirjoittavat, kopioidaan ja lähetetään hyökkääjälle reaaliajassa. Sivustosi näyttää ja toimii täydellisesti; lukko on siellä. Saat tietää viikkojen kuluttua kun maksuntarjoajasi soittaa petosraporttien ryppäästä.
- Huijari injektoi vakuuttavan 'maksa tästä' -boksin oikealle verkkosivustollesi, joka kaappaa maksut omalle tililleen. Asiakkaat uskovat maksaneensa sinulle, syyttävät sinua kun tavarat eivät tule, ja vaativat rahansa takaisin.
- Suuremman prospektin tietoturvatiimi skannaa sivustosi osana toimittajatarkistusta. Puuttuva Content Security Policy näkyy välittömästi korkean vakavuuden puutteena. Hankinnan tarkastajalle tuo yksittäinen puuttuva suojaustoimi luetaan 'tämä toimittaja ei tee perusasioita' – ja kauppa pysähtyy heidän vaatiessa korjauksia tai menee hiljaa kilpailijalle, joka läpäisi.
- Kun tietomurto jäljitetään puuttuvaan, tavalliseen, ilmaiseen suojaukseen, se lakkaa olemasta huonoa onnea ja alkaa näyttää laiminlyönniltä. Se muuttaa sääntelijän kysymyksiä, asiakasviestintävelvoitteita ja kustannuksia – sekä sakot että mainehaittan, joka häipyy pitkään tapahtuman sulkemisen jälkeen.
- Monet sivustot lataavat koodia ulkopuolilta – mainoksilta, fonteilta, tukichateiltä, analytiikalta. Jos jokin niistä vaarantuu, haitallinen koodi ratsastaa suoraan sivuillesi. Content Security Policy rajoittaa räjähdyksen kokoa vain sallimalla ne tietyt ulkoiset lähteet, joihin luotat, jotta yhden toimittajan murtuminen ei automaattisesti tule sinun.
Miksi tällä on merkitystä. Lukko todistaa yhteyden sivustoosi olevan yksityinen, mutta se ei tee mitään koodin hallitsemiseksi, joka toimii sivulla kävijän ollessa siellä. Content Security Policy on suojaus, joka tekee – se kertoo selaimille sivuuttaa kaikki skriptit, jotka eivät tulleet luottamastasi lähteestä, jotta yksi muutettu kenttä, mainos tai lisäosa ei voi muuttua työkaluksi asiakkaidesi rahan ja datan varastamiseen. Se on pisteytetty tarkistus pistekortissasi, todellisten pisteiden arvoinen, ja yksi ensimmäisistä asioista, joita ammattimainen tietoturvatarkistus etsii.
Mitä tämä on selkokielellä
Kun joku vierailee verkkosivustollasi, heidän selaimensa lataa sivusi ja ajaa kaiken koodin siinä – skriptit, jotka tekevät valikoista alas tippuvia, nappuloiden toimivia, maksulomakkeiden lähettäviä ja niin edelleen. Oletuksena selain luottaa kaikkeen. Sillä ei ole tapaa tietää, mikä koodi on aidosti sinulta ja mikä on salakuljetettu jonkun muun toimesta.
Content Security Policy (usein lyhennetty CSP) on lyhyt joukko sääntöjä, jonka verkkosivustosi liittää jokaiselle sivulle, kertoen selaimelle: “aja vain koodia näistä lähteistä, jotka olen hyväksynyt, ja kieltäydy kaikesta muusta.” Se on ero yökerhon välillä, joka päästää kenet tahansa sisään, ja sellaisen välillä, jossa on vieraslistoja ovella.
Syy, miksi tällä on niin paljon merkitystä, on se, että verkkosivustoja muutetaan jatkuvasti – ei aina hakkeroimalla palvelintasi, vaan useimpien sivustojen auki jättämien takaovien kautta: kommenttikenttä, hakuruutu, vanhentunut lisäosa, kolmannen osapuolen skripti mainoksille tai analytiikalle tai chat-widget. Jos hyökkääjä saa edes yhden rivin omaa koodiaan yhdelle sivullesi, selain ajaa sen ikään kuin se olisi sinun. Sieltä se voi lukea kaiken, mitä asiakkaasi kirjoittavat – korttinumerot, salasanat, osoitteet – ja lähettää sen hiljaa muualle. Content Security Policy sulkee tuon oven kieltäytymällä ajamasta mitään lähteestä, jota et hyväksynyt.
Mitä tämä voi maksaa yrityksellesi
Tämä ei ole abstraktia. Hyökkäys, jonka Content Security Policy estää – sivulle injektoitu koodi, joka varastaa dataa omilta asiakkailtasi – on takana joitain suurimmista korttiskimmausrikkomuksista levyillä. Tässä on, miten se yleensä toimii normaalille yritykselle:
-
Näkymätön kassapistesskimmeri. Hyökkääjä lipsauttaa muutaman koodirivin kassasivullesi haavoittuvaisen lisäosan tai vaarantuneen kolmannen osapuolen skriptin kautta. Jokainen korttinumero, nimi ja CVV, jonka asiakkaasi kirjoittavat, kopioidaan ja lähetetään hyökkääjälle reaaliajassa. Sivustosi näyttää ja toimii täydellisesti; lukko on siellä. Saat tietää viikkojen kuluttua kun maksuntarjoajasi soittaa petosraporttien ryppäästä, jotka kaikki jäljittyvät kauppaasi. Nyt kohtaat veloitusten peruutuksia, pakollista tietoturvatarkastusta, mahdollista korttinkäsittelyoikeuksien menettämistä ja murtumisen, jonka saatat olla lain mukaan velvollinen ilmoittamaan.
-
Väärä maksulomake. Huijari injektoi vakuuttavan “maksa tästä” -boksin oikealle verkkosivustollesi. Asiakkaat syöttävät tietonsa luottaen brändiisi; raha ja data menevät hyökkääjälle. Asiakkaat syyttävät sinua – eivätkä ole väärässä, koska se tapahtui sivustollasi.
-
Menetetty sopimus. Suuremman prospektin tietoturvatiimi suorittaa automaattisen sivustoskannauksen osana toimittajatarkistusta. Puuttuva Content Security Policy näkyy välittömästi korkean vakavuuden puutteena. Hankinnan tai tietoturvan tarkastajalle tuo yksittäinen puuttuva suojaus luetaan “tämä toimittaja ei tee perusasioita” – ja kauppa pysähtyy, kun he pyytävät korjauksia, tai menee hiljaa kilpailijalle, joka läpäisi.
-
Ilmoitettava murtuminen. Kun tietomurto jäljitetään puuttuvaan, tavalliseen, ilmaiseen suojaukseen, se lakkaa olemasta huonoa onnea ja alkaa näyttää laiminlyönniltä. Se muuttaa sääntelijän kysymyksiä, asiakasviestintävelvoitteita ja kustannuksia – sekä sakon että mainevaurion, joka häipyy kauan tapahtuman sulkemisen jälkeen.
-
Vaarantunut mainos tai widget. Monet sivustot lataavat koodia ulkopuolilta – mainoksilta, fonteilta, tukichateiltä, analytiikalta. Jos jokin niistä vaarantuu, haitallinen koodi ratsastaa suoraan sivuillesi. Content Security Policy rajoittaa räjähdyksen kokoa vain sallimalla ne tietyt ulkoiset lähteet, joihin luotat, jotta yhden toimittajan murtuminen ei automaattisesti tule sinun.
Mitä se oikeasti on (yksityiskohtia)
Content Security Policy toimitetaan yhtenä HTTP-vastausotsikkona – rivinä, jonka verkkopalvelimesi lähettää jokaisella sivulla. Sen arvo on joukko direktiivejä, jotka kukin nimeävät sisältötyypin ja sille sallitut lähteet. Esimerkiksi:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'
Selkokielellä: oletuksena lataa asioita vain omalta sivustoltani; aja vain skriptejä omalta sivustoltani; salli ei vanhoja lisäosia; äläkä anna muiden sivustojen upottaa minua kehyksessä.
Miltä “hyvä” näyttää. Tarkistuksemme ei vain katso otsikon olemassaoloa – se lukee politiikan direktiivi direktiiviltä ja pisteyttää sen todellisen vahvuuden, kuten tietoturvatarkastaja tekisi. Vahva politiikka:
- Asettaa rajoittavan perustan (
default-src 'self') ja laajentaa sitä vain tietyille luotetuille kolmansille osapuolille, joita todella käytät. - Välttää porsaanreikiä. Se ei käytä
'unsafe-inline'tai'unsafe-eval'skripteille, eikä käytä jokerimerkki (*) tai paljas-järjestelmä-lähteitä (kutenhttps:) skripteille – nämä avaavat uudelleen juuri sen oven, jonka politiikka on tarkoitettu sulkemaan. Missä inline-skriptit ovat todella tarpeen, se käyttää nonce-arvoa tai hash-arvoa, jotta vain sinun tietty hyväksytty koodisi ajetaan. - Lukitsee kehystämisen
frame-ancestors 'self':llä (tämä myös estää “upota sivustosi huijataksesi asiakkaitasi” -hyökkäyksen) ja poistaa käytöstä vanhat lisäosatobject-src 'none':lla. - On pakottava, ei vain-raportoiva.
Content-Security-Policy-Report-Only-otsikko vain seuraa; se ei tarjoa yhtään ajonaikaista suojaa. Tarkistuksemme antaa sille murto-osan krediitistä eikä koskaan kirjaa sitä läpäisynä. Olet suojattu vasta kun politiikka on pakottava.
Politiikka, joka on olemassa, mutta nojaa 'unsafe-inline':iin, 'unsafe-eval':iin tai jokerimerkkilähteisiin, pisteytyy silti huonosti – koska käytännössä se tarjoaa vähän todellista suojaa. Tavoite on tiukka politiikka, ei vain jokin politiikka.
Korjausohje (ilmainen, n. 1–2 tuntia)
Anna tämä IT-henkilöllesi tai verkkosivustoasi hallinnoivalle – korjaus itsessään on täysin ilmainen. Veloitamme vain sen paikallaan pysymisen ja oikeana pysymisen seurannasta ajan myötä; sen käyttöönotto ei maksa mitään. Syy, miksi tämä kestää tunnin tai kaksi minuuttien sijaan, on huolellinen kokeiluvaihe, joka estää sen vahingossa estämästä osaa omasta sivustostasi.
-
Aloita vain-raportointi-tilassa – älä pakota vielä. Lisää
Content-Security-Policy-Report-Only-vastausotsikko. Tämä seuraa ja kirjaa, mitä estettäisiin estämättä mitään todellisessa sivustossa, joten live-sivusto jatkaa toimimistaan samalla kun opit, mistä jokainen sivu todella riippuu. (Tärkeää: vain-raportointi yksinään ei tarjoa kävijöille suojaa – se on vain turvallinen ensimmäinen askel.) -
Rakenna politiikka siitä, mitä sivustosi todella käyttää. Tarkista raportit löytääksesi jokaisen laillisen skriptien, tyylien, fonttien ja kuvien lähteen – oma verkkotunnuksesi, analytiikkasi, maksuntarjoajasi, fonttisäilösi, chat-widgetisi – ja listaa ne sallituiksi lähteiksi. Vankka lähtökohta on
default-src 'self'sekä eksplisiittiset merkinnät luotetuille kolmansille osapuolille, joita todella käytät. -
Vältä porsaanreikiä, jotka tekevät koko pisteen tyhjäksi. Vältä
'unsafe-inline'ja'unsafe-eval'skripteille, ja vältä jokerimerkkilähteitä kuten*ja paljas-järjestelmälähteitä kutenhttps:skripteille – nämä avaavat uudelleen juuri sen aukon, jonka politiikka on tarkoitettu sulkemaan. Missä inline-skriptit ovat välttämättömiä, käytä nonce- tai hash-arvoa, jotta vain sinun tietty hyväksytty koodisi ajetaan. -
Lukitse kehystäminen ja lisäosat. Lisää
frame-ancestors 'self'(tämä myös estää muita sivustoja upottamasta sinun sivustoasi huijatakseen asiakkaitasi, ja se täyttää siihen liittyvän klikkaushuijauksen tarkistuksen) jaobject-src 'none'estämään vanhat lisäosapohaiset hyökkäykset. -
Vaihda vain-raportoinnista pakottavaan. Kun raportit ovat siistit ja sivusto toimii, muuta otsikon nimi
Content-Security-Policy-Report-Only:staContent-Security-Policy:ksi. Tämä on vaihe, joka todella tuottaa suojan – vain-raportointi-politiikka ei, eikä se läpäise tarkistusta.Missä asetat otsikon, riippuu alustastasi:
- Cloudflare: Säännöt → Muuntosäännöt → Muokkaa vastaustahoa → aseta
Content-Security-Policy. (Voit käyttää Cloudflareta myös vain-raportointi-kokeiluun.) - Nginx:
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always; - Apache:
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" - IIS (web.config): lisää mukautettu HTTP-vastaustaho nimeltä
Content-Security-Policyja politiikka sen arvona. - Google Workspace / Microsoft 365: nämä ajavat sähköpostiasi, ei julkista verkkosivustoasi, joten politiikka asetetaan missä tahansa sivustosi todella isännöidään (Cloudflare tai verkkohotelsi yllä), ei sähköpostisi hallintakonsolissa.
- Cloudflare: Säännöt → Muuntosäännöt → Muokkaa vastaustahoa → aseta
-
Tarkista verkkotunnuksesi uudelleen vahvistaaksesi, että politiikka näkyy nyt käyttöön otettuna ja pakottavana ilman heikentäviä porsaanreikiä.
Yleisimmät virheet
- Pysähtyminen vain-raportoinnin kohdalle. Yksittäinen yleisin virhe: politiikka lisätään vain-raportointi-tilaan, kaikki jatkavat, ja sivusto ei koskaan todella suojaudu. Vain-raportointi ei estä mitään. Sinun on vaihdettava pakottavaan.
'unsafe-inline':n kurkottaminen “jotta se vain toimii.” Kun politiikka estää laillisen inline-skriptin, nopea korjaus on sallia kaikki inline-skriptit – mutta se avaa uudelleen täsmälleen sen aukon, jonka politiikka oli tarkoitettu sulkemaan. Käytä sen sijaan nonce- tai hash-arvoa.- Jokerimerkin käyttäminen. Paljas
*(taihttps:)script-src:ssä sallii skriptit mistä tahansa, eli politiikka ei tarjoa lähes mitään todellista suojaa ja pisteytyy silti alhaisesti. - Kolmansien osapuolten lähteiden unohtaminen. Tiukan politiikan pakottaminen listaamatta ensin laillisia ulkoisia palveluja, joita käytät (analytiikka, fontit, maksuviritykset), voi rikkoa osia omasta sivustostasi – mikä on täsmälleen syy, miksi vain-raportointi-kokeiluvaihe on olemassa.
- Sen asettaminen vain etusivulle. Politiikan on katettava jokainen sivu, erityisesti kassapisteet, kirjautumissivut ja tili-sivut – ne ovat ne, joita kannattaa hyökätä.
- Sen käsittely lukon korvikkeena. Content Security Policy ja HTTPS/HSTS suojaavat eri asioita. Haluat ne kaikki; yksi ei kata toista puolesta.
UKK
En ole tekninen – voiko tämän hoitaa itse?
Yksityiskohtia ei tarvitse ymmärtää. Tämä on asetus, jonka verkkosivustoasi tai hostingiasi hallinnoiva lisää, ja Cloudflare-tyyppisissä palveluissa se on suurelta osin ohjattua. Anna heille alla oleva 'Korjausohje'. Se on ilmainen; yksi varotoimenpide on, että se tulisi ottaa käyttöön huolellisesti vain-seuranta-kokeilussa ensin, jotta se ei vahingossa estä osaa omasta sivustostasi – mikä on täsmälleen se, mitä vaiheet kattavat.
Minulla on jo lukko ja SSL-sertifikaatti – eikö sivustoni ole turvallinen?
Lukko suojaa sivun toimituksen; se ei poliisoi sitä, mitä sen sisällä ajetaan. Jos haitallinen koodi koskaan päätyy sivulle – hakkerointun lisäosan, vaarantuneen mainoksen tai injektoidun kentän kautta – lukko ei estä sitä varastamasta dataa. Content Security Policy on kerros, joka rajoittaa, mitä saa ajaa alun perin. Ne suojaavat eri asioita, ja haluat molemmat.
Voiko tämän ottaminen käyttöön rikkoa sivustoni?
Se voi, jos se kytketään aggressiivisesti päälle kerralla, koska se voi estää oikeita skriptejä, joita todella käytät. Siksi standardilähestymistapa on aloittaa 'vain-raportointi'-kokeilutilassa, joka seuraa estämättä, korjata kaikki, mitä se merkitsee, ja vasta sitten pakottaa se. Näin tehtynä se on turvallista – ja kokeiluvaihe on sisäänrakennettu alla olevaan korjaukseen.
Laitoimme sen jo 'vain-raportointi'-tilaan – olemmeko suojattuja?
Ei, ja tämä on yleisin väärä turvallisuuden tunne. Vain-raportointi-tila seuraa ja kirjaa, mitä estettäisiin, mutta se ei estä mitään – kävijät eivät saa mitään todellista suojaa. Se on vain turvallinen ensimmäinen askel. Tarkistuksemme antaa vain-raportoinnille murto-osan oikeaan politiikkaan verrattuna eikä kirjaa sitä läpäisynä. Olet suojattu vasta kun vaihdat pakotustilaan.
Vaikuttaako tämä pisteeseemme vai onko se vain neuvoa-antava?
Se vaikuttaa pisteeseesi. Content Security Policy -tarkistus on pisteytetty ja sen arvo on jopa 25 pistettä Web Security -kategoriassa. Puuttuva tai heikko politiikka luokitellaan korkean vakavuuden puutteena ja laskee arviotasi – ja se on täsmälleen se aukko, josta asiakkaan tietoturvakyselylomake kysyy.
Kehittäjämme lisäsi politiikan mutta pistemäärä on silti alhainen – miksi?
Politiikka voi olla olemassa ja silti heikko. Yleisimmät syylliset ovat porsaanreiät kuten 'unsafe-inline' ja 'unsafe-eval' skripteille tai jokerimerkkilähteet (paljas *), jotka avaavat uudelleen täsmälleen sen aukon, jonka politiikka on tarkoitettu sulkemaan. Tarkistuksemme lukee politiikan direktiivi direktiiviltä ja pisteyttää nuo heikkoudet alaspäin – politiikka, joka sallii kaiken, pisteytyy vähän paremmin kuin ei mitään. Korjaus on tiukentaa skriptisäännöt käyttämällä nonces tai hash-arvoja niiden porsaanreikien sijaan.