Defaults.Exposed › Opravy › Content-Security-Policy (CSP)
Ako opraviť Content-Security-Policy (CSP)
Content Security Policy je bezpečnostné pravidlo, ktoré váš web odovzdáva prehliadaču každého návštevníka, hovoriac mu presne, ktorý kód smie bežať. Bez nej, ak niečo škodlivé niekedy pristane na stránke — cez pole na komentáre, hacknutý plugin alebo skript tretej strany — prehliadač ho spustí slobodne, vrátane kódu, ktorý ticho skimuje čísla kariet a heslá zákazníkov pri ich písaní, kým zámok stále svieti.
Podstata pre vaše podnikanie: Ak je váša stránka niekedy napadnutá, škodlivý kód môže čítať platobné karty a prihlasovacie údaje zákazníkov priamo z vášho pokladňového systému, kým všetko vyzerá úplne normálne — čo vám zanecháva vrátenia platieb, nároky na podvod, oznamovateľné porušenie dát a zlyhanie kontroly, ktoré bezpečnostné tímy väčších klientov používajú na zastavenie alebo zrušenie obchodu.
Čo vás to môže stáť
- Skrytý kód sa vkradne na jednu z vašich stránok a ticho kopíruje každé číslo karty a heslo, ktoré vaši zákazníci zadávajú pri pokladni, posielajúc to útočníkovi, kým váš web vyzerá úplne normálne — dozviete sa to len vtedy, keď prídu sťažnosti na podvod.
- Podvodník umiestni falošný formulár 'zaplaťte tu' na váš skutočný web, ktorý zachytáva platby na jeho vlastný účet; zákazníci si myslia, že platili vám, obviňujú vás, keď tovar nepríde, a požadujú vrátenie peňazí.
- Bezpečnostný tím väčšieho klienta skenuje vašu stránku, vidí, že táto základná ochrana je vypnutá, a označí to — zastavuje alebo stráca vám zmluvu, kým nedokážete, že je to opravené.
- Porušenie vysledovateľné k chýbajúcej štandardnej ochrane sa stáva oznamovateľným incidentom: otázky regulátora, oznámenia zákazníkov a reputačný úder, ktorý stojí oveľa viac než bezplatná oprava.
Prečo na tom záleží. Zámok dokazuje, že pripojenie k vašej stránke je súkromné, ale nič nerobí na kontrolu toho, aký kód beží, keď je návštevník na stránke. Content Security Policy je záchrana, ktorá to robí — hovorí prehliadačom ignorovať akýkoľvek skript, ktorý nepochádzal zo zdroja, ktorému dôverujete, takže jedno napadnuté pole, reklama alebo plugin sa nedá premeniť na nástroj na krádež peňazí a dát zákazníkov. Je to hodnotená kontrola na vašom skóre, stojí za skutočné body a je to jedna z prvých vecí, ktoré profesionálna bezpečnostná kontrola hľadá.
Čo to je, v jednoduchých slovách
Keď niekto navštívi váš web, ich prehliadač stiahne vašu stránku a spustí akýkoľvek kód na nej — skripty, ktoré spôsobujú, že menu sa rozbaľujú, tlačidlá fungujú, platobné formuláre sa odosielajú a tak ďalej. Predvolene prehliadač dôveruje všetkému. Nemá žiadny spôsob, ako vedieť, ktorý kód je skutočne váš a ktorý bol vkradnutý niekym iným.
Content Security Policy (often skrátene CSP) je krátky zoznam pravidiel, ktorý váš web prikladá ku každej stránke a hovorí prehliadaču: “spúšťaj len kód z týchto zdrojov, ktoré som schválil, a odmietni všetko ostatné.” Je to rozdiel medzi nočným klubom, ktorý pustí kohokoľvek, a tým, ktorý má zoznam hostí na dverách.
Dôvod, prečo na tom toľko záleží, je ten, že weby sa neustále narúšajú — nie vždy hacknutím vášho servera, ale cez zadné dvere, ktoré väčšina stránok necháva otvorené: pole na komentáre, vyhľadávacie pole, zastaraný plugin, skript tretej strany pre reklamy alebo analytiku alebo chatový widget. Ak útočník dostane dokonca jeden riadok svojho vlastného kódu na jednu z vašich stránok, prehliadač ho spustí, akoby bol váš. Odtiaľ môže čítať všetko, čo zákazníci píšu — čísla kariet, heslá, adresy — a ticho to posielať niekam inam.
Čo vás to môže stáť
Toto nie je abstraktné. Útok, ktorému Content Security Policy zabraňuje — kód vložený do stránky, ktorý kradne dáta od vašich vlastných zákazníkov — stojí za niektorými z najväčších záznamov narušení skimmovania kariet v histórii.
- Neviditeľný skimmer pri pokladni. Útočník vkĺzne niekoľko riadkov kódu na vašu pokladňovú stránku cez zraniteľný plugin alebo kompromitovaný skript tretej strany. Každé číslo karty, meno a CVV, ktoré vaši zákazníci napíšu, je skopírované a odoslané útočníkovi v reálnom čase. Vaša stránka vyzerá a funguje dokonale; zámok je tu. Zistíte to za niekoľko týždňov, keď váš platobný poskytovateľ zavolá o zhluky správ o podvode.
- Falošný platobný formulár. Podvodník vloží presvedčivú krabicu “zaplaťte tu” na váš skutočný web. Zákazníci zadajú svoje údaje, dôverujúc vašej značke; peniaze a dáta idú útočníkovi.
- Stratená zmluva. Bezpečnostný tím väčšieho potenciálneho zákazníka spustí automatický sken vašej stránky ako súčasť due diligence dodávateľa. Chýbajúca Content Security Policy sa okamžite zobrazí ako medzera s vysokou závažnosťou.
- Oznamovateľné porušenie. Keď je narušenie dát vysledovateľné k chýbajúcej, štandardnej, bezplatnej ochrane, prestáva to byť zlá šťastena a začína to vyzerať ako nedbalosť.
- Kompromitovaná reklama alebo widget. Mnohé stránky načítavajú kód od externých strán — reklamné siete, písma, chatovú podporu, analytiku. Ak je ktorákoľvek z nich narušená, škodlivý kód prichádza priamo na vaše stránky.
Čo to v skutočnosti je (detail)
Content Security Policy je doručená ako jedna hlavička HTTP odpovede — riadok, ktorý váš webový server posiela s každou stránkou. Jej hodnota je sada direktív, každá pomenúva typ obsahu a povolené zdroje preň. Napríklad:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'
V jednoduchých slovách to hovorí: predvolene načítaj veci len z mojej vlastnej stránky; spúšťaj len skripty z mojej vlastnej stránky; nepovoľuj žiadne staré pluginy; nenechaj iné stránky vkladať mňa do rámca.
Ako vyzerá ‘dobré’ nastavenie. Naša kontrola sa nepozrie len na prítomnosť hlavičky — číta politiku direktívu po direktíve a hodnotí, aká silná je v skutočnosti, tak ako by to urobil bezpečnostný recenzent. Silná politika:
- Nastavuje obmedzujúci základ (
default-src 'self') a rozširuje ho len pre konkrétne dôveryhodné tretie strany, ktoré skutočne používate. - Vyhýba sa medzerám. Nepoužíva
'unsafe-inline'alebo'unsafe-eval'pre skripty a nepoužíva zástupné (*) alebo holé schématické zdroje (akohttps:) pre skripty. Kde sú inline skripty skutočne potrebné, používa nonce alebo hash, aby bežal len váš konkrétny schválený kód. - Uzamkne rámovanie pomocou
frame-ancestors 'self'a zakáže staré pluginy pomocouobject-src 'none'. - Je vynucujúca, nie len hlásenie. Hlavička
Content-Security-Policy-Report-Onlylen sleduje; neposkytuje žiadnu ochranu za behu. Naša kontrola mu dáva malý zlomok kreditu.
Ako to opraviť (zadarmo, ~1–2 hodiny)
Odovzdajte to vášmu IT pracovníkovi alebo tomu, kto spravuje váš web — samotná oprava je úplne zadarmo. Dôvod, prečo to trvá hodinu alebo dve namiesto niekoľkých minút, je opatrný krok skúšobného behu, ktorý zabraňuje náhodnému zablokovaniu častí vašej vlastnej stránky.
-
Začnite v režime iba hlásenie — nepresadzujte ešte. Pridajte hlavičku odpovede
Content-Security-Policy-Report-Only. Táto sleduje a zaznamenáva, čo by bolo zablokované, bez skutočného blokovania čohokoľvek. -
Vytvorte politiku z toho, čo vaša stránka skutočne používa. Skontrolujte správy a nájdite každý legitímny zdroj skriptov, štýlov, písiem a obrázkov — vašu vlastnú doménu, vašu analytiku, vášho platobného poskytovateľa, hostitelia vašich písiem, váš chat widget — a uveďte ich ako povolené zdroje.
-
Vyhýbajte sa medzerám, ktoré pozbavujú celý bod. Vyhýbajte sa
'unsafe-inline'a'unsafe-eval'pre skripty a vyhýbajte sa zástupným zdrojom ako*a holým schémam akohttps:pre skripty. Kde sú inline skripty nevyhnutné, použite nonce alebo hash. -
Uzamknite rámovanie a pluginy. Pridajte
frame-ancestors 'self'aobject-src 'none'. -
Prepnite z iba hlásenia na vynucovanie. Keď sú správy čisté a stránka funguje, zmeňte názov hlavičky z
Content-Security-Policy-Report-OnlynaContent-Security-Policy. Toto je krok, ktorý skutočne poskytuje ochranu.Kde nastaviť hlavičku závisí od vašej platformy:
- Cloudflare: Pravidlá → Transformovať pravidlá → Upraviť hlavičku odpovede → nastavte
Content-Security-Policy. - 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): pridajte vlastnú hlavičku HTTP odpovede s názvom
Content-Security-Policy.
- Cloudflare: Pravidlá → Transformovať pravidlá → Upraviť hlavičku odpovede → nastavte
-
Znovu skontrolujte svoju doménu, aby ste potvrdili, že politika teraz vykazuje zapnutú a vynucujúcu bez oslabujúcich medzier.
Bežné chyby
- Zastavenie pri iba hlásení. Najčastejšia chyba: politika je pridaná v režime iba hlásenia, každý ďalej ide a stránka nie je nikdy skutočne chránená. Iba hlásenie nič nezablokuje. Musíte prepnúť na vynucovanie.
- Siahnuť po
'unsafe-inline', aby to ‘len fungovalo’. Keď politika zablokuje legitímny inline skript, rýchla oprava je povolenie všetkých inline skriptov — ale tým sa znovu otvorí presne tá diera, ktorú politika mala uzatvoriť. Namiesto toho použite nonce alebo hash. - Použitie zástupného znaku. Holé
*(alebohttps:) vscript-srcumožňuje skripty odkiaľkoľvek, čo znamená, že politika neposkytuje takmer žiadnu skutočnú ochranu. - Zabudnutie na zdroje tretích strán. Presadzovanie prísnej politiky bez predchádzajúceho vymenúvania legitímnych externých služieb môže poškodiť časti vašej vlastnej stránky — čo je presne dôvod, prečo existuje krok skúšobného behu.
- Nastavenie len na domovskej stránke. Politika musí pokrývať každú stránku, najmä pokladňu, prihlásenie a účtovné stránky.
- Zaobchádzanie s ňou ako s náhradou za zámok. Content Security Policy a HTTPS/HSTS chránia rôzne veci. Chcete všetky; jedna druhú nepokrýva.
FAQ
Nie som technicky zdatný — môžem to vyriešiť sám?
Nemusíte rozumieť detailom. Toto je nastavenie pridané tým, kto spravuje váš web alebo hosting, a na službách ako Cloudflare je väčšinou riadené. Odovzdajte im sekciu 'Ako to opraviť' nižšie. Je zadarmo; jedno varovanie je, že by sa malo najprv nasadiť opatrne v režime iba sledovania, aby sa náhodou nezablokovali časti vašej vlastnej stránky — čo presne pokrývajú kroky.
Mám zámok a SSL certifikát — nie je moja stránka zabezpečená?
Zámok zabezpečuje doručenie vašej stránky; nekontroluje, čo beží vo vnútri. Ak sa škodlivý kód niekedy dostane na stránku — cez hacknutý plugin, kompromitovanú reklamu alebo vložené pole — zámok ho nezastaví pri krádeži dát. Content Security Policy je vrstva, ktorá obmedzuje, čo smie bežať na prvom mieste. Chránia rôzne veci a chcete oboje.
Mohlo by zapnutie tohto poškodiť moju stránku?
Môže, ak je zapnuté agresívne naraz, pretože to môže zablokovať legitímne skripty, ktoré skutočne používate. Preto je štandardný prístup začať v 'iba hlásenie' režime, ktorý sleduje bez blokovania, opraviť čokoľvek, čo označí, a až potom presadiť. Takto urobené je to bezpečné — a krok skúšobného behu je zabudovaný do opravy nižšie.
Už sme ho umiestnili do režimu 'iba hlásenie' — sme krytí?
Nie, a toto je najčastejší falošný pocit bezpečnosti. Režim iba hlásenie sleduje a zaznamenáva, čo by bolo zablokované, ale nič nezablokuje — návštevníci nedostanú žiadnu skutočnú ochranu. Je to len bezpečný prvý krok. Naša kontrola dáva iba hlásenie len malý zlomok kreditu skutočnej politiky. Ste chránení až po prepnutí do vynucovacieho režimu.
Ovplyvňuje to naše skóre alebo je to len poradné?
Ovplyvňuje vaše skóre. Kontrola Content Security Policy je hodnotená a stojí až 25 bodov v kategórii Webová bezpečnosť. Chýbajúca alebo slabá politika je označená ako vysoká závažnosť.
Náš vývojár pridal politiku, ale skóre je stále nízke — prečo?
Politika môže existovať a stále byť slabá. Najčastejší vinníci sú medzery ako 'unsafe-inline' a 'unsafe-eval' pre skripty alebo zástupné znakové zdroje (holé *), ktoré znovu otvoria presne tú medzeru, ktorú má politika uzatvoriť. Naša kontrola číta politiku direktívu po direktíve a hodnotí tieto slabosti — politika, ktorá čokoľvek umožňuje, skóre len o málo lepšie ako žiadna.