Dansk

Lær hvordan Content Security Policy (CSP) effektivt afhjælper Cross-Site Scripting (XSS) angreb og forbedrer websikkerheden for et globalt publikum.

Content Security Policy (CSP): En omfattende guide til forebyggelse af XSS

I nutidens digitale landskab er websikkerhed af afgørende betydning. Cross-Site Scripting (XSS) angreb er fortsat en udbredt og farlig trussel mod webapplikationer globalt. Content Security Policy (CSP) er en kraftfuld HTTP-response header, der giver et ekstra lag af sikkerhed, som hjælper med at mindske risikoen for XSS-sårbarheder. Denne guide giver et omfattende overblik over CSP, dens implementering og bedste praksis til at beskytte dine webapplikationer mod XSS-angreb.

Hvad er Cross-Site Scripting (XSS)?

Cross-Site Scripting (XSS) er en type injektionsangreb, hvor ondsindede scripts injiceres i ellers godartede og pålidelige websteder. XSS-angreb opstår, når en angriber bruger en webapplikation til at sende ondsindet kode, generelt i form af et browser-side script, til en anden slutbruger. Fejl, der gør det muligt for disse angreb at lykkes, er ret udbredte og forekommer overalt, hvor en webapplikation bruger input fra en bruger i den output, den genererer, uden at validere eller kode den.

Der er tre hovedtyper af XSS-angreb:

XSS-angreb kan have alvorlige konsekvenser, herunder:

Hvad er Content Security Policy (CSP)?

Content Security Policy (CSP) er et ekstra lag af sikkerhed, der hjælper med at detektere og afbøde visse typer angreb, herunder Cross-Site Scripting (XSS) og datainjektionsangreb. CSP implementeres ved hjælp af en HTTP-response header, der giver dig mulighed for at kontrollere de ressourcer (f.eks. scripts, stylesheets, billeder, skrifttyper, frames), som browseren har tilladelse til at indlæse for en bestemt side. Ved at definere en streng CSP kan du reducere angrebsoverfladen for din webapplikation betydeligt og gøre det vanskeligere for angribere at injicere ondsindet kode.

CSP fungerer ved at definere en hvidliste over kilder, hvorfra browseren har tilladelse til at indlæse ressourcer. Enhver ressource, der indlæses fra en kilde, der ikke udtrykkeligt er tilladt i CSP, vil blive blokeret af browseren. Dette forhindrer udførelse af uautoriserede scripts og reducerer risikoen for XSS-angreb.

Sådan fungerer CSP: Direktiver og kilder

CSP konfigureres ved hjælp af en række direktiver, der hver især specificerer en politik for en bestemt type ressource. Hvert direktiv består af et navn efterfulgt af en liste over tilladte kilder. Her er nogle af de mest almindeligt anvendte CSP-direktiver:

Almindeligt anvendte kildeværdier inkluderer:

Implementering af CSP

CSP kan implementeres på to primære måder:

  1. HTTP Header: Den foretrukne metode er at konfigurere din webserver til at sende `Content-Security-Policy` HTTP-response headeren. Dette giver dig mulighed for at definere CSP for hver side eller ressource på dit websted.
  2. <meta> Tag: CSP kan også defineres ved hjælp af et <meta> tag i <head> sektionen af dit HTML-dokument. Denne metode er dog mindre fleksibel og har begrænsninger sammenlignet med brugen af HTTP-headeren. For eksempel kan direktiverne `frame-ancestors`, `sandbox` og `report-uri` ikke bruges i HTML meta tags.

Brug af HTTP Headeren

For at implementere CSP ved hjælp af HTTP-headeren skal du konfigurere din webserver til at inkludere `Content-Security-Policy` headeren i sine responses. De specifikke konfigurationstrin vil variere afhængigt af den webserver, du bruger.

Her er eksempler for almindelige webservere:

Brug af <meta> Tag

For at implementere CSP ved hjælp af <meta> tagget, tilføj følgende tag til <head> sektionen af dit HTML-dokument:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://example.com; img-src 'self' data:;">

Vigtige overvejelser:

CSP Eksempler

Her er adskillige CSP-eksempler med forklaringer:

  1. Grundlæggende CSP:
  2. Content-Security-Policy: default-src 'self';

    Denne politik tillader kun ressourcer fra samme oprindelse.

  3. Tilladelse af scripts fra et specifikt domæne:
  4. Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com;

    Denne politik tillader ressourcer fra samme oprindelse og scripts fra `https://example.com`.

  5. Tilladelse af styles fra en CDN:
  6. Content-Security-Policy: default-src 'self'; style-src 'self' https://cdn.example.com;

    Denne politik tillader ressourcer fra samme oprindelse og styles fra `https://cdn.example.com`.

  7. Tilladelse af billeder fra enhver kilde:
  8. Content-Security-Policy: default-src 'self'; img-src *;

    Denne politik tillader ressourcer fra samme oprindelse og billeder fra enhver kilde (anbefales ikke til produktion).

  9. Rapportering af CSP-overtrædelser:
  10. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint;

    Denne politik tillader ressourcer fra samme oprindelse og sender overtrædelsesrapporter til `/csp-report-endpoint`. Det anbefales at bruge `report-to` i stedet for `report-uri`.

  11. Brug af `report-to` og `report-uri` sammen for kompatibilitet:
  12. Content-Security-Policy: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint; report-to csp-endpoint;
    Report-To: {"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"/csp-report-endpoint"}]}

    Dette eksempel demonstrerer opsætning af både en `report-uri` (til ældre browsere) og et `report-to` endpoint, sammen med konfiguration af selve `Report-To` headeren. Sørg for, at din server håndterer `Report-To` headeren korrekt og indstiller `group`, `max_age` og `endpoints` korrekt.

  13. Brug af Nonces til Inline Scripts:
  14. Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-rAnd0mN0nc3Str1nG';

    Denne politik tillader ressourcer fra samme oprindelse og inline scripts med det matchende nonce-attribut.

    <script nonce="rAnd0mN0nc3Str1nG">
      // Your inline script code here
    </script>

CSP i Report-Only Tilstand

CSP kan implementeres i to tilstande:

Report-Only tilstand er nyttig til test og forfining af din CSP, før du håndhæver den. For at aktivere Report-Only tilstand skal du bruge `Content-Security-Policy-Report-Only` HTTP-headeren i stedet for `Content-Security-Policy` headeren.

Eksempel:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint;

Denne konfiguration sender rapporter til `/csp-report-endpoint` uden at blokere nogen ressourcer.

Bedste praksis for implementering af CSP

Her er nogle bedste praksisser for implementering af CSP effektivt:

  1. Start med en streng politik: Start med en restriktiv politik, der kun tillader ressourcer fra samme oprindelse, og lemp den gradvist efter behov.
  2. Brug Nonces eller Hashes til Inline Scripts og Styles: Undgå at bruge `'unsafe-inline'` og brug nonces eller hashes til at tillade specifikke inline scripts og styles.
  3. Undgå `'unsafe-eval'`: Hvis det er muligt, undgå at bruge `'unsafe-eval'`, da det kan introducere sikkerhedsrisici. Overvej alternative tilgange til dynamisk kodeudførelse.
  4. Brug HTTPS: Sørg for, at alle ressourcer indlæses over HTTPS for at forhindre man-in-the-middle angreb. Brug `upgrade-insecure-requests` direktivet til automatisk at opgradere usikre anmodninger.
  5. Overvåg CSP-overtrædelser: Opsæt et rapporteringsendpoint til at overvåge CSP-overtrædelser og identificere potentielle sikkerhedsproblemer.
  6. Test din CSP grundigt: Test din CSP i forskellige browsere og miljøer for at sikre, at den fungerer som forventet.
  7. Iterer og forfin: CSP-implementering er en iterativ proces. Overvåg og forfin løbende din CSP, efterhånden som din applikation udvikler sig.
  8. Overvej `strict-dynamic` direktivet: Brug `strict-dynamic` til at reducere kompleksiteten af din CSP ved at videregive tillid til scripts, der er indlæst af pålidelige scripts.

Værktøjer til CSP

Adskillige værktøjer kan hjælpe dig med at generere, teste og overvåge CSP:

CSP og Frameworks/Biblioteker

Når du bruger frameworks og biblioteker, er det vigtigt at konfigurere CSP korrekt for at sikre kompatibilitet og forhindre sikkerhedsproblemer. Her er nogle overvejelser:

CSP og CDNs (Content Delivery Networks)

CDNs bruges almindeligvis til at hoste statiske aktiver såsom JavaScript-filer, CSS-stylesheets og billeder. For at tillade ressourcer fra CDN'er i din CSP skal du udtrykkeligt hvidliste CDN-domænerne.

Eksempel:

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' https://cdnjs.cloudflare.com;

Denne politik tillader scripts fra jsDelivr og styles fra Cloudflares cdnjs.

Almindelige CSP-fejl at undgå

Her er nogle almindelige CSP-fejl at undgå:

Avancerede CSP-koncepter

Ud over det grundlæggende kan adskillige avancerede CSP-koncepter yderligere forbedre din websikkerhed:

Fremtiden for CSP

CSP er i konstant udvikling for at imødegå nye sikkerhedsudfordringer. Fremtidige udviklinger kan omfatte:

Konklusion

Content Security Policy (CSP) er et kraftfuldt værktøj til at afbøde XSS-angreb og forbedre websikkerheden. Ved at definere en streng CSP kan du reducere angrebsoverfladen for din webapplikation betydeligt og beskytte dine brugere mod ondsindet kode. Effektiv implementering af CSP kræver omhyggelig planlægning, grundig test og løbende overvågning. Ved at følge de bedste praksisser, der er beskrevet i denne guide, kan du udnytte CSP til at forbedre sikkerhedspositionen for dine webapplikationer og beskytte din online tilstedeværelse i det globale digitale økosystem.

Husk regelmæssigt at gennemgå og opdatere din CSP for at tilpasse dig udviklende sikkerhedstrusler og sikre, at dine webapplikationer forbliver beskyttede.