Defaults.Exposed

Defaults.ExposedKorjaukset › 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

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:

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:

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.

  1. 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.)

  2. 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.

  3. 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ä kuten https: 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.

  4. 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) ja object-src 'none' estämään vanhat lisäosapohaiset hyökkäykset.

  5. Vaihda vain-raportoinnista pakottavaan. Kun raportit ovat siistit ja sivusto toimii, muuta otsikon nimi Content-Security-Policy-Report-Only:sta Content-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-Policy ja 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.
  6. Tarkista verkkotunnuksesi uudelleen vahvistaaksesi, että politiikka näkyy nyt käyttöön otettuna ja pakottavana ilman heikentäviä porsaanreikiä.

Yleisimmät virheet

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.