Defaults.Exposed

Defaults.ExposedOpravy › 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áť

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.

Č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:

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.

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

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

  3. 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 ako https: pre skripty. Kde sú inline skripty nevyhnutné, použite nonce alebo hash.

  4. Uzamknite rámovanie a pluginy. Pridajte frame-ancestors 'self' a object-src 'none'.

  5. 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-Only na Content-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.
  6. Znovu skontrolujte svoju doménu, aby ste potvrdili, že politika teraz vykazuje zapnutú a vynucujúcu bez oslabujúcich medzier.

Bežné chyby

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.