Defaults.Exposed

Defaults.ExposedJavítások › Content-Security-Policy (CSP)

Hogyan javítsd ki: Content-Security-Policy (CSP)

A Content Security Policy egy biztonsági szabály, amelyet a webhelyed minden látogató böngészőjének átad, megmondva pontosan, milyen kódok futhatnak. Nélküle, ha bármi rosszindulatú kerül egy oldalra – egy megjegyzőmező, egy feltört bővítmény vagy egy harmadik feles szkript révén –, a böngésző szabadon futtatja, beleértve a kódot, amely csendesen leolvasja az ügyfelek kártyaszámait és jelszavait, ahogy beírják azokat, miközben a lakat még mindig mutat.

Az üzleted szempontjából lényeg: Ha az oldalt valaha illetéktelenül módosítják, a rosszindulatú kód közvetlenül a saját pénztáradból olvashatja le az ügyfelek fizetési kártyaadatait és bejelentkezési adatait, miközben minden teljesen normálisnak tűnik – visszaterheléseket, csalási igényeket, bejelentendő adatvédelmi incidenseket és biztonsági ellenőrzési eredményt hagyva, amelyet a nagyobb ügyfelek biztonsági csapatai az üzlet megállítására vagy megsemmisítésére használnak.

Mibe kerülhet ez neked

Miért fontos. A lakat bizonyítja, hogy a kapcsolat az oldaladon privát, de semmit sem tesz annak ellenőrzéséért, milyen kódok futnak, amint a látogató az oldalon van. A Content Security Policy az a védőeszköz, amely ezt csinálja – megmondja a böngészőknek, hogy hagyják figyelmen kívül a olyan szkripteket, amelyek nem az általad megbízott forrásokból érkeznek, tehát egyetlen manipulált mező, hirdetés vagy bővítmény sem válhat az ügyfelek pénzét és adatait ellopó eszközzé. Ez egy pontozásos ellenőrzés az eredménylapodon, valódi pontokat ér, és az egyike az első dolgoknak, amelyet egy szakmai biztonsági felülvizsgálat keres.

Mi ez egyszerű szavakkal

Amikor valaki meglátogatja a weboldaladat, a böngészőjük letölti az oldaladat és futtatja a rajta lévő kódot – a szkripteket, amelyek legördülő menüket, gombokat, fizetési űrlapokat, stb. működtetnek. Alapból a böngésző megbízik mindenben. Nincs módja tudni, melyik kód valóban a tiéd, és melyiket csempészte be valaki más.

A Content Security Policy (gyakran CSP-nek rövidítve) egy rövid szabálylista, amelyet a webhelyed minden oldalhoz mellékel, megmondva a böngészőnek: „csak az általam jóváhagyott forrásokból futtass kódot, és utasíts vissza mindent mást.” Ez a különbség egy olyan éjszakai klub között, amely mindenkit beenged, és egy vendéglistával rendelkező között.

Ennek azért van akkora jelentősége, mert a webhelyeket folyamatosan manipulálják – nem mindig a szervered feltörésével, hanem a legtöbb oldal által nyitva hagyott hátsó ajtókon keresztül: egy megjegyzőmező, egy keresőmező, egy elavult bővítmény, egy harmadik feles hirdetési vagy analitikai szkript, vagy egy chat widget. Ha egy támadó egyetlen sort is el tud juttatni a saját kódjából az egyik oldaladra, a böngésző úgy futtatja, mintha a tiéd lenne. Onnantól mindent olvashatja, amit az ügyfeleid begépelnek – kártyaszámokat, jelszavakat, adatokat –, és csendesen elküldheti máshova. A Content Security Policy bezárja ezt az ajtót azáltal, hogy megtagadja az olyan forrásokból érkező futtatást, amelyeket nem hagytál jóvá.

Mibe kerülhet ez neked

Ez nem elvont. A Content Security Policy által megelőzött támadás – egy oldalba befecskendezett kód, amely adatokat lop az ügyfeleidtől –, a legnagyobb kártya-leolvasó feltörések mögött áll. Így szokott kinézni egy normál vállalkozásnál:

Mi is ez pontosan (a részletek)

A Content Security Policy egyetlen HTTP válasz fejlécként kerül kézbesítésre – egy sor, amelyet a webszervered minden oldalhoz küld. Az értéke direktívák készlete, mindegyik névvel lát egy tartalom-típust és az ahhoz engedélyezett forrásokat. Például:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

Egyszerű szavakkal: alapból csak a saját oldalamról töltsd be a dolgokat; csak a saját oldalamból futtass szkripteket; ne engedélyezz régi stílusú bővítményeket; és ne engedd, hogy más oldalak keretbe záruljak.

Mit jelent a „jó” beállítás. Az ellenőrzésünk nem csak a fejléc meglétét nézi – direktívánként olvassa a politikát, és úgy pontozza, mennyire erős, ahogy egy biztonsági felülvizsgáló tenné. Egy erős politika:

Egy politika, amely létezik, de 'unsafe-inline'-ra, 'unsafe-eval'-ra vagy helyettesítő karakterekre támaszkodik, még mindig alacsonyra pontozódik – mert a gyakorlatban kevés valódi védelmet nyújt. A cél egy szoros politika, nem csupán bármilyen politika.

Hogyan javítsd ki (ingyenes, ~1–2 óra)

Add ezt az IT-személyednek vagy annak, aki a weboldaladat kezeli – maga a javítás teljesen ingyenes. Mi csak azért számítjuk fel a díjat, hogy figyeljük, hogy idővel érvényes marad és helyes marad; a bekapcsolás semmibe sem kerül. Az ok, amiért ez percek helyett egy-két órát vesz igénybe, az a gondos próba-lépés, amely megakadályozza, hogy az oldal részei véletlenül blokkolódjanak.

  1. Kezdj report-only módban – még ne kényszerítsd. Adj hozzá egy Content-Security-Policy-Report-Only válasz fejlécet. Ez figyel és naplóz, mi lenne blokkolva anélkül, hogy ténylegesen blokkolna bármit, tehát az élő oldal tovább működik, amíg megtanulod, mitől függ valóban minden oldal. (Fontos: a report-only önmagában semmi védelmet nem ad a látogatóknak – ez csak a biztonságos első lépés.)

  2. Építsd fel a politikát abból, amit az oldal ténylegesen használ. Nézd át a jelentéseket, hogy megtaláld a szkriptek, stílusok, betűtípusok és képek minden legitim forrását – a saját domained, az analitikád, a fizetési szolgáltatód, a betűtípus-hosztod, a chat widgeted –, és sorold fel őket engedélyezett forrásként.

  3. Kerüld a kiskapukat, amelyek megsemmisítik az egész pontot. Kerüld el az 'unsafe-inline'-t és az 'unsafe-eval'-t a szkriptekhez, és kerüld a helyettesítő forrásokat, mint a * és bare sémák, mint a https: a szkriptekhez. Ahol az inline szkriptek elkerülhetetlenek, használj nonce-ot vagy hash-t, hogy csak az adott jóváhagyott kódod futhasson.

  4. Zárd le a keretet és a bővítményeket. Add hozzá a frame-ancestors 'self'-et (ez is megállítja azt, hogy más oldalak beágyazzák a tiedet, hogy megtévesszék az ügyfeleidet), és az object-src 'none'-t a régi bővítmény-alapú támadások blokkolásához.

  5. Váltás report-only-ről kényszerítésre. Amint a jelentések tiszták, és az oldal működik, változtasd meg a fejléc nevét Content-Security-Policy-Report-Only-ról Content-Security-Policy-ra. Ez a lépés nyújtja a valódi védelmet – önmagában egy report-only politika nem teszi ezt, és nem fogja átmenni az ellenőrzést.

    Ahol beállítod a fejlécet, a platformodtól függ:

    • Cloudflare: Rules → Transform Rules → Modify Response Header → állítsd be a Content-Security-Policy-t.
    • 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): adj hozzá egy egyéni HTTP válasz fejlécet Content-Security-Policy névvel, a politikával mint értékkel.
  6. Ellenőrizd újra a domained, hogy erősítsd meg, a politika most bekapcsoltnak és kényszerítettnek mutat-e, gyengítő kiskapuk nélkül.

Általános hibák

GYIK

Nem vagyok technikai beállítottságú – meg tudom magam oldani ezt?

Nem kell értened a részletekhez. Ez egy olyan beállítás, amelyet az, aki a weboldaladat vagy tárhelyedet kezeli, hozzáad, és a Cloudflare-hez hasonló szolgáltatásoknál nagyrészt irányított. Add át nekik az alábbi 'Hogyan javítsd ki' részt. Ingyenes; az egyetlen figyelmeztetés az, hogy gondosan ki kell görgetni egy csak-figyelési próbában, hogy ne blokkoljon véletlenül az oldal saját részeit – ami pontosan az, amivel a lépések foglalkoznak.

Már van lakatom és SSL-tanúsítványom – nem biztonságos az oldalam?

A lakat biztosítja az oldal kézbesítését; nem ellenőrzi, mi fut benne. Ha rosszindulatú kód valaha kerül egy oldalra – egy feltört bővítményen, egy kompromittált hirdetésen vagy egy befecskendezett mezőn keresztül –, a lakat nem akadályozza meg abban, hogy ellopja az adatokat. A Content Security Policy az a réteg, amely korlátozza, hogy mi futhat eleve. Különböző dolgokat védenek, és mindkettőt akarod.

Ennek bekapcsolása tönkreteheti az oldalam?

Igen, ha agresszívan egyszerre kapcsolja be, mert blokkolhatja a ténylegesen használt jogos szkripteket. Ezért a szokásos megközelítés az, hogy először 'report-only' próbamódban indul el, amely figyel blokkolás nélkül, javítja amit megjelöl, és csak ezután kényszeríti ki. Így csinálva biztonságos – és a próba-lépés beépített a javításba alább.

Már 'report-only' módban tettük – fedve vagyunk?

Nem, és ez a leggyakoribb hamis biztonságérzet. A report-only mód figyel és naplóz, de semmit sem blokkol – a látogatók nulla valódi védelmet kapnak. Ez csak a biztonságos első lépés. Az ellenőrzésünk a report-only-nak a valódi politika kreditjének töredékét adja, és nem rögzíti megfelelésként. Csak akkor vagy védve, ha kényszerítési módra vált.

Ez befolyásolja a pontszámunkat, vagy csak tanácsadó?

Befolyásolja a pontszámodat. A Content Security Policy ellenőrzés pontozásos és a Webbiztonsági kategóriában akár 25 pontot ér. Egy hiányzó vagy gyenge politika magas súlyosságúnak minősül, és rontja a besorolásodat – és pontosan azt a rést érinti, amelyről egy ügyfél biztonsági kérdőíve kérdez.

A fejlesztőnk hozzáadott egy politikát, de a pontszám még mindig alacsony – miért?

Egy politika létezhet, mégis gyenge lehet. A leggyakoribb bűnösök a kiskapuk, mint az 'unsafe-inline' és az 'unsafe-eval' a szkriptekre, vagy helyettesítő karakteres forrásokra (egy üres *), amelyek újra megnyitják a pontosan azt a rést, amelyet a politika be volt hivatva zárni. Az ellenőrzésünk direktívánként olvassa a politikát és pontszámot csökkent ezekre a gyengeségekre – egy politika, amely bármit engedélyez, alig pontozódik jobban, mint ha nincs. A javítás a szkriptszabályok megszorítása nonce-ok vagy hash-ek segítségével ezek kiskapuk helyett.