Valitse direktiivit ja lähteet, ja tämä sivu kokoaa oikean yhden rivin Content-Security-Policy -käytännön vastausotsikkoon tai <meta>-tagiin — sekä tärkeät huomautukset: mitkä direktiivit eivät koskaan palaududefault-src:iin, milloin tiiviste tai nonce ohittaa hiljaa unsafe-inline:n ja mitä strict-dynamic kytkee pois päältä. Sisäänrakennettu SHA-256/384/512-tiivistegeneraattori muuntaa upotetut skriptit ja tyylit 'sha256-…'-lähteiksi. Kaikki toimii selaimessa; mitään ei ladata ylös.
Fetch-direktiivit — mistä sisältö saa tulla
Valitsemattomat direktiivit jätetään käytännöstä pois; valinta ilman valittuja lähteitä jätetään huomiotta. 'none' peruuttaa muut ruudut omalta rivileltään. Lisälähteet-kenttä ottaa pilkulla erotetun luettelon: isäntänimet (cdn.example.com), skeemat (https:), tiivisteet ja noncet lainausmerkeillä tai ilman.
direktiivi
'self'
'none'
'unsafe-inline'
'unsafe-eval'
'strict-dynamic'
data:
blob:
lisälähteet
Asiakirjadirektiivit — mitä sivu itse saa tehdä
Nämä neljä eivät palaudu default-src:iin: jos ne jätetään pois, se tarkoittaa ”ei rajoitusta”, joten täydellinen käytäntö asettaa ne erikseen.
direktiivi
'self'
'none'
lisälähteet
Kytkimet, nonce ja raportointi
skriptin nonce
report-uri
report-to
Käytäntö
Mitään ei ole vielä rakennettu. Valitse joitakin lähteitä ja paina Rakenna käytäntö, tai lataa OWASP-perustason esimerkki.
Tiivistegeneraattori upotetuille skripteille ja tyyleille
Liitä täsmälleen sisältö tagien <script> ja </script> väliin (tai tyylilohko) — tavu tavulta, ilman alussa tai lopussa olevaa rivinvaihtoa — ja valitse algoritmi. Tulos on 'sha256-…'-lähde, jota CSP 3 odottaa.
Tiivisteen tulos näkyy tässä.
Ota käyttöön otsikkona eikä meta-tagina aina kun mahdollista. Vastausotsikko on täysi CSP: frame-ancestors, report-uri ja report-to toimivat vain siellä, ja otsikko otetaan käyttöön ennen kuin ensimmäinen HTML-tavu jäsennetään. Meta-tagi on varavaihtoehto staattisille tiedostoille ilman palvelinmääritystä. Tarkista sivuston todelliset vastausotsikot turvaotsakkeiden tarkistimella ja pura raakoja vastauslohkoja HTTP-otsakejäsentimellä.
Itsetesti Ajaa rakentajan uudelleen kiinteitä tiloja vastaan: lähteiden järjestys, 'none'-keskinäinen poissulkeminen, OWASP-perustason merkkijono, nonce- ja tiivistelainaukset, base-uri/form-action/frame-ancestors-palautumattomuushuomautukset, nonce tai tiiviste ohittaa unsafe-inline, strict-dynamic-huomautukset, Report-Only-otsikkojen nimet, meta-tagin poissulkemiset, tiivistegeneraattori riippumattomasti lasketuja SHA-vektoreita vastaan sekä kielteiset polut. Mitään ei lähetetä minnekään.
Mikä on sisällön suojauskäytäntö?
Yhdessä lauseessa: CSP on palvelimen sivun mukana lähettämä sallittujen lähteiden luettelo, joka kertoo selaimelle tarkalleen, mistä skriptit, tyylit, kuvat ja yhteydet saavat tulla — joten vaikka hyökkääjä lisäisi HTML:ää, lisätty skripti ei silti lataudu, koska sen lähde ei ole luettelossa.
kyllä — ilman valintaa oleva direktiivi perii default-src:n
Asiakirjadirektiivit
base-uri, form-action, frame-ancestors, sandbox
mitä sivu itse saa tehdä (upottaa, lähettää lomakkeita, ratkaista suhteellisia URL-osoitteita)
ei — jokainen on asetettava erikseen
Raportointi ja muut
report-uri, report-to, upgrade-insecure-requests
minne rikkomusilmoitukset menevät ja vanhojen URL-osoitteiden päivitys
ei (ne eivät ole fetch-direktiivejä)
Terävimmät kohdat, kukin omana kappaleenaan
'unsafe-inline' vs. tiivisteet ja noncet. Jos direktiivissä on nonce tai mikä tahansa tiivistelähde, CSP 3 sanoo, että 'unsafe-inline'jätetään huomiotta — se pysyy siellä vain vanhoille selaimille. Siksi ”lisäsimme noncen ja pidimme unsafe-inline:n turvallisuuden vuoksi” tarkoittaa todellisuudessa, että modernit selaimet pakottavat noncen. Generaattori merkitsee yhdistelmän, jotta se on päätös eikä vahinko.
strict-dynamic kytkee sallittujen luettelon pois päältä. Kun script-src:ssa on strict-dynamic, isäntälähteet, skeemat, 'self', 'unsafe-inline' ja data: jätetään skripteiltä huomiotta; vain nonce ja tiivisteet ratkaisevat, ja skriptit, jotka ne lataavat, saavat ladata lisää skriptejä. Se on moderni tapa ajaa latausskriptejä — mutta se tekee muusta script-src-listasta koristeen.
Meta-tagit ovat toisen luokan.frame-ancestors, report-uri ja report-to jätetään huomiotta <meta http-equiv>-tagissa. Generaattori näyttää, mitkä käytännön osat eivät hiljaa sovellu.
Yleisiä virheitä
Aloittaminen default-src *:lla ja pitkällä poikkeuslistalla. Tee toisinpäin: tiukka default-src 'self', ja laajenna sitten vain direktiivit, jotka tarvitsevat laajennusta. Kapeat käytännöt epäonnistuvat äänekkäästi testauksessa; laajat käytännöt epäonnistuvat hiljaa ikuisesti.
Julkaistaan script-src 'unsafe-inline' 'unsafe-eval' ja julistetaan valmiiksi. Tuo käytäntö ei estä juuri mitään, mitä XSS-hyökkäys haluaa tehdä. Anna skripteillesi nonce tai tiiviste, lisää strict-dynamic, ja pidä report-only käynnissä tuotannossa havaitakseen regressiot.
Unohtaa, ettei default-src kata kaikkea.base-uri, form-action, frame-ancestors ja sandbox eivät palaudu mihinkään — todellisissa CSP-käyttöönotoissa eniten mainittu aukko.
Testaa ensin pakotetussa tilassa. Aja Report-Only-tilassa keräimen kanssa viikon, lue raportit ja vaihda sitten pakotukseen. Käytäntö, joka rikkoo maksun, on huonompi kuin ei käytäntöä.
Tyhjätilan hashaaminen eri tavalla. Tiiviste kattaa upotetun lohkon tarkat tavut; ”avulias” rakennusvaihe, joka leikkaa lopun rivinvaihdot, muuttaa jokaisen tiivisteen. Luo tiivisteet siitä, mikä toimitetaan, ei lähdekoodista.
UKK
Tarvitsenko default-src:n, jos listaan jokaisen direktiivin? Et, mutta sen pitäminen lattiana on hyvä käytäntö: uudet fetch-direktiivit tulevissa selaimissa palautuvat silloin perustasollesi sen sijaan, että ne olisivat ”sallittuja”.
Mitä upgrade-insecure-requests oikeastaan tekee? Se kertoo selaimelle kirjoittaa uudelleen jokaisen http://-URL-osoitteen, jonka sivu lataisi — kuvat, tyylit, haut — muotoon https:// ennen pyyntöä. Se on siirtymätyökalu; lopputilanne on sivut ilman yhtään http://-URL-osoitetta.
Nonce vai tiiviste? Nonce, kun hallitset palvelimen vastausta (satunnainen arvo per vastaus sekä otsikossa että jokaisessa skriptitagissa). Tiiviste, kun HTML on staattinen tai välimuistissa. Ei koskaan staattista noncea — nonce, joka ei muutu, on vain unsafe-inline lisävaiheilla.
Miksi käytäntö toimitetaan, mutta rikkomusilmoituksia ei saavu? Tarkista, oletko Report-Only-tilassa (vain raportit), osoittaako report-uri keräimeen, joka hyväksyy POST-pyynnöt, ja oletko asettanut myös Reporting-Endpoints- / Report-To-mekanismin, jota moderni report-to-direktiivi vaatii.
Korvaako CSP muut suojaukset? Ei. Se on yksi kerros: pidä tulosteesi escapattuna, evästeet HttpOnly- ja Secure-lipuilla suojattuina ja HSTS käytössä. Tämän sivuston turvaotsakkeiden tarkistin arvioi koko joukon.