Fejlløsninger

Problemer og Løsninger med Cross-Origin Resource Sharing (CORS)

  • 14 min. læsetid
  • Hostragons-teamet
Problemer og Løsninger med Cross-Origin Resource Sharing (CORS)

Dette blogindlæg fokuserer på Cross-Origin Resource Sharing (CORS)-problemer, som webudviklere ofte støder på. Det begynder med at forklare, hvad CORS er, dets grundprincipper og hvorfor det er vigtigt. Derefter undersøges det detaljeret, hvordan CORS-fejl opstår, og hvilke metoder der kan anvendes til at løse disse fejl. Derudover fremhæves de bedste praksisser for en sikker og effektiv implementering af CORS samt vigtige aspekter, man bør være opmærksom på. Denne guide har til formål at hjælpe dig med at forstå og løse problemer relateret til CORS i dine webapplikationer.

Hvad er CORS? Grundlæggende Information og Betydning

Cross-Origin Resource Sharing (CORS) er en sikkerhedsmekanisme, der tillader web browsere at give adgang til indhold fra forskellige domæner. Grundlæggende regulerer den, hvordan en webapplikation kan tilgå ressourcer (for eksempel API’er, skrifttyper, billeder) uden for sin egen domæne. Browsere blokerer som udgangspunkt forespørgsler mellem forskellige domæner på grund af Same-Origin Policy. CORS tilbyder en sikker metode til at omgå denne begrænsning.

Vigtigheden af CORS opstår ud fra moderne webapplikationers kompleksitet og behovet for at hente data fra forskellige kilder. Mange webapplikationer er afhængige af API’er, CDN’er eller andre eksterne ressourcer, der hostes på forskellige servere. Uden CORS ville adgangen til disse ressourcer være umulig, hvilket ville begrænse webapplikationernes funktionalitet betydeligt. CORS giver udviklere fleksibilitet til sikkert at hente data fra forskellige kilder samtidig med, at sikkerheden bevares.

I nedenstående tabel opsummeres CORS' grundlæggende begreber og funktionsmåde:

Hvad er CORS? Grundlæggende Information og Betydning
Begreb Forklaring Betydning
Same-Origin Policy Forhindrer scripts, der er indlæst fra én kilde, i at få adgang til ressourcer fra en anden kilde. Sikrer sikkerhed og forhindrer, at skadelige scripts får adgang til følsomme data.
Cross-Origin Request En HTTP-forespørgsel fra et webside-domæne til et andet domæne. Muliggør adgang til forskellige API’er og ressourcer i moderne webapplikationer.
CORS-Headers Særlige headers, som serveren tilføjer til svaret for at tillade cross-origin-forespørgsler. Angiver over for browseren, hvilke domæner der har adgang til ressourcerne.
Preflight Request En forespørgsel, som browseren sender til serveren med OPTIONS-metoden før komplekse cross-origin-forespørgsler. Gør det muligt for serveren at afgøre, om den vil acceptere forespørgslen.

Den grundlæggende funktionalitet af CORS er baseret på, at webserveren via HTTP-svarheaders informerer browseren om, hvilke ressourcer og domæner der må tilgås. Serveren angiver dette med headeren Access-Control-Allow-Origin. Hvis det domæne, der foretager forespørgslen, er angivet i denne header, eller hvis der er angivet * (alle), accepterer browseren forespørgslen. Ellers blokerer browseren, og der opstår en CORS-fejl.

    Grundlæggende elementer i CORS

  • Access-Control-Allow-Origin: Angiver hvilke domæner der må tilgå ressourcen.
  • Access-Control-Allow-Methods: Angiver hvilke HTTP-metoder (GET, POST, PUT, DELETE m.fl.) der må benyttes.
  • Access-Control-Allow-Headers: Angiver hvilke specielle headers der må inkluderes i forespørgslen.
  • Access-Control-Allow-Credentials: Angiver om legitimationsoplysninger (cookies, autorisationsheaders) må inkluderes.
  • Access-Control-Max-Age: Angiver hvor længe resultaterne af preflight-forespørgsler må caches.

CORS-fejl skyldes ofte forkert konfiguration på serversiden. Det er vigtigt, at udviklere konfigurerer deres servere korrekt og kun giver pålidelige domæner adgang til ressourcer. Derudover bør man følge bedste praksis for CORS, da det hjælper med at minimere sikkerhedsrisici.

CORS er en uundværlig del af moderne webapplikationer, og det bevarer sikkerheden samtidig med at det giver fleksibilitet til at hente data fra forskellige kilder. Når det konfigureres korrekt, øger det webapplikationens funktionalitet og forbedrer brugeroplevelsen.

Principen for Cross-Origin Resource Sharing’s funktion

Cross-Origin Resource Sharing (CORS) er en mekanisme, der gør det muligt for webbrowsere at give websideindhold fra én kilde (origin) adgang til ressourcer på en anden kilde. Browsere håndhæver typisk samme-oprindelse-politikken (same-origin policy), hvilket betyder, at en webside kun kan få adgang til ressourcer fra den samme protokol, værtsnavn og port. CORS er udviklet til at overvinde denne begrænsning og muliggøre sikker datadeling mellem forskellige kilder.

Hovedformålet med CORS er at sikre webapplikationers sikkerhed. Same-origin policy forhindrer ondsindede websider i at få adgang til brugernes følsomme data. Dog er det i visse tilfælde nødvendigt at dele data mellem forskellige kilder. For eksempel kan en webapplikation have brug for adgang til et API på en anden server. CORS tilbyder en sikker løsning til sådanne scenarier.

Principen for Cross-Origin Resource Sharing s funktion
Felt Beskrivelse Eksempel
Origin Adressen på den kilde, der initierer anmodningen. http://example.com
Access-Control-Allow-Origin Angiver hvilke kilder serveren tillader adgang for. http://example.com, *
Access-Control-Request-Method Angiver hvilken HTTP-metode klienten ønsker at bruge. POST, GET
Access-Control-Allow-Methods Angiver hvilke HTTP-metoder serveren tillader. POST, GET, OPTIONS

CORS fungerer via en række HTTP-headere mellem klienten (browseren) og serveren. Når klienten laver en cross-origin anmodning, tilføjer browseren automatisk Origin-headeren til anmodningen. Serveren kontrollerer denne header og bestemmer, om den vil tillade anmodningen. Hvis serveren tillader det, svarer den med en Access-Control-Allow-Origin-header, der angiver, hvilke kilder der må få adgang til anmodningen.

    CORS-processen

  1. Browseren anmoder om en ressource fra en anden kilde.
  2. Browseren tilføjer Origin-headeren til anmodningen.
  3. Serveren vurderer Origin-headeren.
  4. Serveren svarer med Access-Control-Allow-Origin-headeren.
  5. Browseren kontrollerer svaret og tillader eller blokerer anmodningen.

Det er afgørende for webudviklere at forstå principperne bag CORS. Forkerte CORS-konfigurationer kan føre til sikkerhedssårbarheder i webapplikationer. Derfor er det nødvendigt at vide, hvordan CORS fungerer, og hvordan det konfigureres korrekt for at udvikle sikre og effektive webapplikationer.

Godkendelsesprocesser

I CORS bruges godkendelsesprocesser til at afgøre, hvilke kilder serveren tillader adgang for. Serveren kan via Access-Control-Allow-Origin-headeren give tilladelse til specifikke kilder, eller bruge *-tegnet for at tillade alle kilder. Dog udgør brugen af *-tegnet sikkerhedsrisici, og det bør benyttes med forsigtighed. Især når der håndteres følsomme data, giver det større sikkerhed at tillade adgang kun fra specifikke kilder.

Fejl og deres løsninger

CORS-fejl opstår oftest på grund af forkerte serverkonfigurationer. En af de mest almindelige fejl er, at Access-Control-Allow-Origin-headeren mangler eller er forkert konfigureret. I så fald blokerer browseren anmodningen og viser en CORS-fejl. For at løse denne type fejl er det vigtigt at kontrollere serverindstillingerne og sikre, at Access-Control-Allow-Origin-headeren er korrekt konfigureret. Det er også nødvendigt at sikre, at preflight-anmodninger (OPTIONS-requests) håndteres korrekt.

Metoder til at Forstå og Løse CORS-fejl

Cross-Origin Resource Sharing (CORS)-fejl er et af de problemer, webudviklere ofte støder på og bruger tid på at løse. Disse fejl opstår, når en webside forsøger at anmode om ressourcer fra et andet domæne, en protokol eller en port, og browseren af sikkerhedsgrunde blokerer denne anmodning. At forstå og løse CORS-fejl er afgørende for at sikre, at moderne webapplikationer fungerer problemfrit.

At diagnosticere CORS-fejl er det første skridt til at finde kilden til problemet. Undersøgelse af fejlmeddelelser via browserens udviklerværktøjer (typisk under Console-fanen) hjælper dig med at identificere, hvilken ressource der er blokeret og hvorfor. Fejlmeddelelser indeholder ofte tips til løsning af problemet. For eksempel viser beskeden No ‘Access-Control-Allow-Origin’ header is present on the requested resource, at der mangler en CORS-header på serveren.

Metoder til at Forstå og Løse CORS-fejl
Fejlkode Beskrivelse Mulige Løsninger
403 Forbidden Serveren har forstået anmodningen, men afviser den. Tjek serverens CORS-konfiguration. Konfigurer tilladte ressourcer korrekt.
500 Internal Server Error Der opstod en uventet fejl på serveren. Undersøg serverloggene, og find årsagen til fejlen. Der kan være et problem med CORS-konfigurationen.
CORS-fejl (Browser Console) Browseren blokerede anmodningen, fordi CORS-politikken blev overtrådt. Konfigurer serverens ‘Access-Control-Allow-Origin’-header korrekt.
ERR_CORS_REQUEST_NOT_HTTP CORS-anmodningen foretages ikke via HTTP eller HTTPS-protokollen. Sikre dig, at anmodningen foretages via den korrekte protokol.

Der findes forskellige metoder til at løse CORS-fejl. Den mest almindelige metode er at tilføje de nødvendige CORS-headere på serversiden. ‘Access-Control-Allow-Origin’-headeren angiver, hvilke ressourcer der må få adgang til serveren. Hvis denne header sættes til ‘*’, gives der adgang til alle ressourcer, men det anbefales normalt ikke af sikkerhedsmæssige årsager. Det er mere sikkert kun at tillade bestemte ressourcer. For eksempel, ‘Access-Control-Allow-Origin: https://example.com’ tillader kun anmodninger fra adressen ‘https://example.com’.

Andre vigtige punkter for at forebygge og løse CORS-fejl inkluderer:

    Typer af fejl

  • Manglende eller forkert konfigureret ‘Access-Control-Allow-Origin’-header: Forkert opsætning af headers på serversiden.
  • Problemer med preflight-anmodninger: Serveren håndterer ikke ‘OPTIONS’-anmodninger korrekt.
  • Problemer med credentials: Cookies eller autentificeringsoplysninger sendes ikke korrekt.
  • Problemer med omdirigering mellem ressourcer: Omdirigeringer er ikke kompatible med CORS-politikker.
  • Problemer med proxyservere: Proxyservere videresender ikke CORS-headere korrekt.
  • Krav om HTTPS-protokol: Anmodninger via usikre HTTP-forbindelser bliver blokeret.

Ud over ændringer på serversiden kan der foretages nogle justeringer på klientsiden for at løse CORS-fejl. For eksempel kan du benytte en proxyserver til at omdirigere anmodninger, eller anvende alternative metoder til dataudveksling som JSONP. Det skal dog bemærkes, at sådanne metoder kan medføre sikkerhedsrisici. Derfor er den bedste løsning som regel at sikre den korrekte CORS-konfiguration på serversiden.

De bedste praksisser for CORS

De bedste praksisser for CORS

At konfigurere Cross-Origin Resource sharing (CORS) korrekt er afgørende for at sikre din webapplikations sikkerhed og funktionalitet. Forkert konfigureret CORS-politik kan føre til sikkerhedshuller og muliggøre uautoriseret adgang. Derfor er det vigtigt at være omhyggelig og følge bedste praksisser ved implementering af CORS.

De bedste praksisser for CORS
Bedste Praksis Beskrivelse Vigtighed
Begræns tilladte Origin-domæner Angiv kun betroede domæner i Access-Control-Allow-Origin-headeren. Undgå brug af *. Øger sikkerheden og forhindrer uautoriseret adgang.
Brug legitimationsoplysninger når nødvendigt For at sende legitimationsoplysninger såsom cookies eller autoriseringsheadere, brug Access-Control-Allow-Credentials: true. Muliggør adgang til ressourcer, der kræver autentificering.
Håndtér preflight-forespørgsler korrekt Behandl OPTIONS-forespørgsler korrekt, og giv nødvendige headere (Access-Control-Allow-Methods, Access-Control-Allow-Headers). Sikrer sikker håndtering af komplekse forespørgsler (f.eks. PUT, DELETE).
Håndtér fejlbeskeder omhyggeligt Informér brugeren om CORS-fejl på en meningsfuld måde og undgå at afsløre potentielle sikkerhedshuller. Forbedrer brugeroplevelsen og reducerer sikkerhedsrisici.

For at øge din sikkerhed bør du undgå at bruge jokertegnet (*) i Access-Control-Allow-Origin-headeren. Dette giver adgang til dine ressourcer fra ethvert domæne og gør det muligt for potentielt ondsindede sites at stjæle eller manipulere dine data. Angiv i stedet kun de specifikke domæner, som du stoler på og vil tillade adgang til.

    Implementeringstrin

  1. Identificér dine behov: Afklar, hvilke domæner der skal have adgang til dine ressourcer.
  2. Konfigurér Access-Control-Allow-Origin-headeren: Liste kun tilladte domæner på serversiden.
  3. Administrér legitimationsoplysninger: Hvis cookies eller autoriseringsheadere kræves, konfigurer Access-Control-Allow-Credentials-headeren korrekt.
  4. Behandl preflight-forespørgsler: Giv passende svar på OPTIONS-forespørgsler.
  5. Opret mekanismer til fejlhåndtering: Informér brugeren forklarende om CORS-fejl.
  6. Test og overvåg: Test din CORS-konfiguration regelmæssigt og overvåg potentielle sikkerhedshuller.

Derudover er det også vigtigt at håndtere preflight-forespørgsler korrekt. Browsere sender en OPTIONS-forespørgsel til serveren før de sender visse komplekse forespørgsler (for eksempel PUT eller DELETE). Din server skal svare korrekt på denne forespørgsel og inkludere de nødvendige Access-Control-Allow-Methods og Access-Control-Allow-Headers-headere. Dette giver browseren tilladelse til at sende den egentlige forespørgsel.

Det er vigtigt, at du tester og overvåger din CORS-konfiguration regelmæssigt. Prøv forskellige scenarier for at opdage uventede adfærd eller potentielle sikkerhedshuller. Derudover kan du overvåge serverlogfiler for at opdage forsøg på uautoriseret adgang. Husk, at at skabe en sikker webapplikation er en løbende proces, som kræver regelmæssig opdatering og forbedring. Ved at konfigurere dine Cross-Origin Resource-delinger efter disse bedste praksisser, kan du markant øge sikkerheden af dine webapplikationer.

Vigtige Punkter Ved Brug af CORS

Når du bruger Cross-Origin Resource Sharing (CORS), er der adskillige vigtige ting at være opmærksom på for at sikre både sikkerhed og korrekt funktion af din applikation. CORS er en mekanisme, der gør det muligt for webapplikationer at udveksle data mellem forskellige kilder, men kan føre til alvorlige sikkerhedsrisici, hvis det konfigureres forkert. Det er derfor vigtigt at konfigurere CORS-politikker omhyggeligt og følge bestemte trin for at forebygge potentielle problemer.

Fejl i CORS-konfigurationen kan åbne adgang til følsomme data for uautoriserede personer eller muliggøre ondsindede angreb. For eksempel kan forkert konfiguration af Access-Control-Allow-Origin-headeren føre til, at forespørgsler fra alle kilder bliver tilladt. Dette udgør en stor sikkerhedsrisiko, især hvis det kun er forespørgsler fra bestemte kilder, der skal tillades. Tabellen nedenfor opsummerer de mest almindelige fejl i CORS-konfiguration og deres potentielle konsekvenser.

Vigtige Punkter Ved Brug af CORS
Fejl Beskrivelse Konsekvens
Brug af Access-Control-Allow-Origin: * Tillader forespørgsler fra alle kilder. Sikkerhedsbrud, hvor ondsindede sites kan få adgang til data.
Brug af Access-Control-Allow-Credentials: true sammen med Access-Control-Allow-Origin: * Tillader, at legitimationsoplysninger sendes til alle kilder (blokeres af browsere). Uventet opførsel, fejl i identitetsgodkendelse.
Tilladelse af forkerte HTTP-metoder Tillader alle metoder, selvom kun bestemte (som GET eller POST) bør tillades. Potentielle sikkerhedsrisici, datamanipulation.
Accept af unødvendige headers Accepterer alle headers i stedet for kun de nødvendige. Sikkerhedsrisici, unødvendig datatransfer.

En anden vigtig faktor ved brug af CORS er korrekt konfiguration af preflight-forespørgsler. Preflight-forespørgsler er OPTIONS-forespørgsler, som browsere sender til serveren før den egentlige forespørgsel, for at kontrollere serverens CORS-politik. Hvis serveren ikke svarer korrekt på disse forespørgsler, bliver den reelle forespørgsel blokeret. Det er derfor vigtigt at sikre, at din server besvarer OPTIONS-forespørgsler korrekt.

Vigtige Punkter at Være Opmærksom på

  • Konfigurer Access-Control-Allow-Origin-headeren korrekt. Tillad kun betroede kilder.
  • Vær forsigtig, når du bruger Access-Control-Allow-Credentials-headeren. Undgå at bruge den, hvis det ikke er nødvendigt.
  • Konfigurer preflight-forespørgselsmekanismen korrekt. Giv korrekte svar på OPTIONS-forespørgsler.
  • Tillad kun de nødvendige HTTP-metoder og headers. Bloker dem, der ikke er nødvendige.
  • Opdater og test din CORS-konfiguration jævnligt for sikkerhedsrisici.
  • Brug fejlfindingsværktøjer til at identificere og løse CORS-fejl.

Det er meget nyttigt at bruge browserens udviklerværktøjer til at rette CORS-fejl. Disse værktøjer kan vise fejl og advarsler relateret til CORS, hvilket hjælper dig med at finde roden til problemet. Derudover kan du på serversiden gennemgå logfiler for at verificere, om dine CORS-politikker bliver korrekt implementeret. Husk, at en korrekt konfigureret CORS-politik er en vigtig del af at øge sikkerheden og forbedre brugeroplevelsen på din webapplikation.

Ofte Stillede Spørgsmål

Hvorfor er CORS vigtigt, og hvordan påvirker det webudviklingsprocessen?

CORS øger sikkerheden på websider ved at forhindre ondsindede kilder i at få adgang til følsomme data. Dette hjælper med at beskytte brugeroplysninger og bevare applikationens integritet. Under webudviklingen muliggør CORS kontrolleret deling af ressourcer mellem forskellige domæner og sikrer en sikker og stabil brugeroplevelse. Det er kritisk for udviklere at forstå denne mekanisme for at lukke potentielle sikkerhedshuller og udvikle problemfri applikationer.

Hvordan håndhæver browsere CORS-politikker, og hvilke HTTP-headere bruges i denne proces?

Browserne udfører automatisk CORS-kontroller, når en webside anmoder om ressourcer fra et andet domæne. I denne proces sender browseren en 'Origin'-header til serveren, som svarer med headeren 'Access-Control-Allow-Origin'. Browseren sammenligner værdierne af disse headere for at afgøre, om anmodningen er sikker. Derudover bruges headere som 'Access-Control-Allow-Methods', 'Access-Control-Allow-Headers' og 'Access-Control-Allow-Credentials' til at angive tilladte metoder, headere og legitimationsoplysninger for forespørgslen. Korrekt konfiguration af disse headere er afgørende for at forhindre CORS-problemer.

Hvad er de mest almindelige årsager til CORS-fejl, og hvordan kan jeg opdage disse fejl?

Blandt de mest almindelige årsager til CORS-fejl er forkert konfiguration af serverens 'Access-Control-Allow-Origin'-header, anmodninger fra forskellige porte eller protokoller, preflight request-fejl og forkert håndtering af credentials. For at opdage disse fejl kan du bruge browserens udviklerværktøjer (Developer Tools). Fejlbeskeder, der vises under konsol-fanen, angiver som regel kilden til CORS-problemet. Derudover kan du inspicere HTTP-headerne under netværksfanen for at kontrollere serverens CORS-responser.

Hvad er en 'preflight request' (forhåndsanmodning), og hvornår udløses den?

En 'preflight request' er en OPTIONS-anmodning, som browseren sender til serveren for at spørge, hvilke HTTP-metoder og headers der vil blive brugt, før den egentlige anmodning sendes. Denne type anmodning udløses især, når HTTP-metoder udover GET og POST (som PUT, DELETE osv.) anvendes, eller når særlige headers tilføjes. Serveren skal give et korrekt CORS-svar på denne 'preflight request', ellers bliver den egentlige anmodning blokeret.

Er det muligt at deaktivere eller omgå CORS, og hvad er de potentielle risici ved dette?

CORS er en sikkerhedsmekanisme, der implementeres i browseren. På serversiden styrer du, hvilke ressourcer der må tilgås, ved at konfigurere CORS-headere. Det anbefales generelt ikke at deaktivere CORS helt, da dette gør dit website sårbart over for forskellige sikkerhedsrisici. Men under udvikling eller i bestemte testscenarier kan CORS midlertidigt omgås via browserudvidelser eller proxyservere. Det er vigtigt, at disse midlertidige løsninger ikke anvendes i produktionsmiljøer.

Hvilke sikkerhedshuller findes der ved CORS, og hvilke tiltag skal vi tage for at forebygge dem?

Blandt de mest almindelige CORS-sikkerhedshuller er indstillingen af 'Access-Control-Allow-Origin'-headeren til '*' (dvs. tillade adgang for alle) og muligheden for, at ondsindede sider får adgang til legitimationsoplysninger. For at forhindre disse holes skal du begrænse 'Access-Control-Allow-Origin'-headeren til kun tilladte domæner, bruge 'Access-Control-Allow-Credentials'-headeren med omhu og implementere yderligere sikkerhedstiltag på serversiden (f.eks. CSRF-beskyttelse).

Hvilke server-side tilgange findes til CORS-konfiguration, og hvordan vælger jeg den mest passende tilgang?

Der findes forskellige server-side tilgange til CORS-konfiguration. Blandt disse er manuel indstilling af HTTP-headere, brug af et CORS-middleware eller konfiguration af en webserver (som Nginx eller Apache). Den mest passende tilgang afhænger af din applikations behov, den valgte teknologi og serverinfrastruktur. Middleware-løsninger tilbyder typisk mere fleksibilitet og styring, mens manuel konfiguration af headere kan være tilstrækkeligt til simple applikationer.

Hvordan skal jeg administrere CORS-indstillinger på forskellige miljøer (udvikling, test, produktion)?

For at administrere CORS-indstillinger på forskellige miljøer kan du bruge miljøvariabler eller konfigurationsfiler. I udviklingsmiljøet kan du anvende mere fleksible indstillinger (f.eks. 'Access-Control-Allow-Origin: *') for at minimere CORS-fejl, men disse bør absolut ikke bruges i produktion. I testmiljøet bør du anvende strengere CORS-indstillinger, der afspejler produktionsmiljøet. I produktionsmiljøet skal du begrænse 'Access-Control-Allow-Origin'-headeren til kun tilladte domæner og dermed sikre den mest sikre konfiguration. Dette kan opnås ved at oprette separate konfigurationsfiler for hvert miljø eller ved at bruge miljøvariabler.

Del denne artikel:

Hostragons-teamet

Opdaterede guider fra vores ekspertteam om hosting, servere og domænenavne. Lad os sammen finde den rigtige løsning til dit projekt.

Kontakt os