Defaults.Exposed

Defaults.ExposedÅtgärder › Content-Security-Policy (CSP)

Hur du fixar Content-Security-Policy (CSP)

En Content Security Policy är en säkerhetsregel din webbplats överlämnar till varje besökares webbläsare, som berättar exakt vilken kod som tillåts köra. Utan en sådan, om något skadligt någonsin hamnar på en sida — via ett kommentarsfält, ett hackat plugin eller ett tredjepartsskript — kör webbläsaren det fritt, inklusive kod som tyst skimmar dina kunders kortnummer och lösenord medan de skriver, med hänglåset fortfarande synligt.

Slutsats för ditt företag: Om din webbplats någonsin manipuleras kan skadlig kod läsa dina kunders betalningskorts- och inloggningsuppgifter direkt från din kassa medan allt ser helt normalt ut — vilket lämnar dig med chargebacks, bedrägerianspråk, ett rapporteringspliktigt dataintrång och en kontrollflagga som säkerhetsteam hos större kunder använder för att stoppa eller döda en affär.

Vad detta kan kosta dig

Varför det spelar roll. Hänglåset bevisar att anslutningen till din webbplats är privat, men det gör ingenting för att kontrollera vilken kod som körs när en besökare väl är på sidan. En Content Security Policy är skyddsåtgärden som gör det — den berättar för webbläsare att ignorera alla skript som inte kom från en källa du litar på, så att ett enda manipulerat fält, en annons eller ett plugin inte kan förvandlas till ett verktyg för att stjäla dina kunders pengar och data. Det är en betygsatt kontroll på ditt betyg, värd riktiga poäng, och en av de första sakerna en professionell säkerhetsgranskning letar efter.

Vad det här är, i klartext

När någon besöker din webbplats laddar deras webbläsare ned din sida och kör vilken kod som helst som finns på den — skripten som gör att menyer fälls ned, knappar fungerar, betalningsformulär skickas och så vidare. Som standard litar webbläsaren på allt det. Den har inget sätt att veta vilken kod som genuint är din och vilken som smugits in av någon annan.

En Content Security Policy (ofta förkortat CSP) är en kort lista av regler din webbplats kopplar till varje sida, som berättar för webbläsaren: “kör bara kod från dessa källor jag har godkänt, och vägra allt annat.” Det är skillnaden mellan en nattklubb som släpper in vem som helst och en med en gästlista vid dörren.

Orsaken till att det här är så viktigt är att webbplatser manipuleras ständigt — inte alltid genom att hacka din server, utan genom bakdörrarna de flesta webbplatser lämnar öppna: ett kommentarsfält, en sökruta, ett föråldrat plugin, ett tredjepartsskript för annonser eller analys, eller en chattwidget. Om en angripare får ens en rad av sin egen kod på en av dina sidor kör webbläsaren den som om den vore din. Därifrån kan den läsa allt dina kunder skriver — kortnummer, lösenord, adresser — och tyst skicka det någon annanstans. En Content Security Policy stänger den dörren genom att vägra köra något från en källa du inte godkänt.

Vad det här kan kosta dig

Det här är inte abstrakt. Attacken en Content Security Policy förhindrar — kod injicerad på en sida som stjäl data från dina egna kunder — ligger bakom några av de största kortskimningsintrången på rekord. Så här tenderar det att spela ut för ett normalt företag:

Vad det faktiskt är (detaljen)

En Content Security Policy levereras som ett enda HTTP-svarshuvud — en rad din webbserver skickar med varje sida. Dess värde är en uppsättning direktiv, var och en namnger en typ av innehåll och de tillåtna källorna för det. Till exempel:

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

I klartext säger det: ladda som standard bara saker från min egen webbplats; kör bara skript från min egen webbplats; tillåt inga gamla plugins; och låt inte andra webbplatser bädda in min i en ram.

Vad “bra” ser ut som. Vår kontroll tittar inte bara på huvudets närvaro — den läser policyn direktiv för direktiv och betygsätter hur stark den faktiskt är, på det sätt en säkerhetsgranskare skulle. En stark policy:

Så här åtgärdar du det (gratis, ~1–2 timmar)

Skicka det här till din IT-person eller den som driver din webbplats — åtgärden i sig är helt gratis. Vi tar bara betalt för att övervaka att den förblir på plats och förblir korrekt över tid; att slå på den kostar ingenting. Orsaken till att det tar en timme eller två snarare än minuter är det noggranna provsteget som förhindrar att det av misstag blockerar delar av din egen webbplats.

  1. Börja i report-only-läge — verkställ inte ännu. Lägg till ett Content-Security-Policy-Report-Only-svarshuvud. Det observerar och loggar vad som skulle blockeras utan att faktiskt blockera något, så den live-webbplatsen fortsätter fungera medan du lär dig vad varje sida genuint beror på. (Viktigt: report-only ensamt ger besökare inget skydd — det är bara det säkra första steget.)

  2. Bygg policyn från vad din webbplats faktiskt använder. Granska rapporterna för att hitta varje legitim källa av skript, stilar, teckensnitt och bilder — din egen domän, din analys, din betalningsleverantör, din teckensnittsvärd, din chattwidget — och lista dem som tillåtna källor. En solid startpunkt är default-src 'self' plus explicita poster för de betrodda tredjeparterna du verkligen använder.

  3. Undvik kryphålen som besegrar hela poängen. Styr undan från 'unsafe-inline' och 'unsafe-eval' för skript, och undvik jokerteckenkällor som * och bara scheman som https: för skript — dessa återöppnar exakt det gap policyn är avsedd att stänga. Där inline-skript är oundvikliga, använd ett nonce eller hash så att bara din specifika godkända kod körs.

  4. Lås ned inramning och plugins. Lägg till frame-ancestors 'self' (det här stoppar också att andra webbplatser bäddar in din för att lura dina kunder, och det tillfredsställer den relaterade clickjacking-kontrollen) och object-src 'none' för att blockera legacy plugin-baserade attacker.

  5. Byt från report-only till verkställande. När rapporterna är rena och webbplatsen fungerar, ändra huvud-namnet från Content-Security-Policy-Report-Only till Content-Security-Policy. Det här är steget som faktiskt levererar skydd — en report-only policy ensam gör det inte, och klarar inte kontrollen.

    Var du sätter huvudet beror på din plattform:

    • Cloudflare: Regler → Omvandlingsregler → Ändra svarshuvud → sätt 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): lägg till ett anpassat HTTP-svarshuvud med namnet Content-Security-Policy och policyn som dess värde.
  6. Kontrollera din domän igen för att bekräfta att policyn nu visas som påslagen och verkställande, utan försvagande kryphål.

Vanliga misstag

Vanliga frågor

Jag är inte teknisk — kan jag lösa det här själv?

Du behöver inte förstå detaljerna. Det här är en inställning som läggs till av den som driver din webbplats eller hosting, och på tjänster som Cloudflare är det i stor utsträckning guidad. Skicka avsnittet 'Så här åtgärdar du det' nedan till dem. Det är gratis; den enda försiktighetsåtgärden är att det bör rullas ut försiktigt i ett observationssteg först så att det inte av misstag blockerar delar av din egen webbplats — vilket är exakt vad stegen täcker.

Jag har redan hänglåset och ett SSL-certifikat — är inte min webbplats säker?

Hänglåset säkrar leveransen av din sida; det kontrollerar inte vad som körs inuti den. Om skadlig kod någonsin hamnar på en sida — via ett hackat plugin, ett komprometterat skript eller ett injicerat fält — stoppar hänglåset inte den från att stjäla data. En Content Security Policy är lagret som begränsar vad som tillåts köra från första början. De skyddar olika saker, och du vill ha båda.

Kan det hända att det bryter min webbplats om jag aktiverar det?

Det kan hända om det slås på aggressivt allt på en gång, för det kan blockera legitima skript du faktiskt använder. Det är därför standardmetoden är att börja i ett 'report-only'-provläge som observerar utan att blockera, åtgärda allt det flaggar och bara sedan verkställa det. Gjort på det här sättet är det säkert — och provsteget är inbyggt i åtgärden nedan.

Vi satte det i 'report-only'-läge redan — är vi täckta?

Nej, och det här är den vanligaste falska trygghetskänslan. Report-only-läge observerar och loggar vad som skulle blockeras, men blockerar ingenting — besökare får noll verkligt skydd. Det är bara det säkra första steget. Vår kontroll ger report-only en liten bråkdel av krediterna av en riktig policy och registrerar det inte som godkänt. Du är bara skyddad när du byter till verkställningsläge.

Påverkar det här vårt betyg, eller är det bara råd?

Det påverkar ditt betyg. Content Security Policy-kontrollen är betygsatt och värd upp till 25 poäng i kategorin Webbsäkerhet. En saknad eller svag policy är märkt med hög allvarlighetsgrad och drar ned ditt betyg — och det är exakt den typ av gap ett kunds säkerhetsformulär frågar om.

Vår utvecklare lade till en policy men betyget är fortfarande lågt — varför?

En policy kan finnas och ändå vara svag. De vanligaste bovarna är kryphål som 'unsafe-inline' och 'unsafe-eval' för skript, eller jokerteckenkällor (ett blott *), som återöppnar exakt det gap policyn är avsedd att stänga. Vår kontroll läser policyn direktiv för direktiv och betygsätter ned dessa svagheter — en policy som tillåter vad som helst ger litet bättre betyg än att inte ha någon. Åtgärden är att strama åt skriptreglerna med nonces eller hashar istället för de kryphålen.