Vad är CORS?
Cross-Origin Resource Sharing (CORS) är en säkerhetsmekanism i webbläsare som styr vilka externa webbplatser som får göra JavaScript-anrop till din server. Utan CORS-restriktioner kan vilken webbplats som helst som en användare besöker i tysthet göra API-anrop till din tjänst — läsa privat data eller utföra handlingar å användarens vägnar.
CORS upprätthålls av webbläsaren via HTTP-headers som din server skickar i sina svar. En felkonfiguration av CORS uppstår när dessa headers är för tillåtande, vilket gör att opålitliga ursprung (origins) kan göra autentiserade anrop till ditt API.
Vad du bör göra
De vanligaste misstagen
Wildcard-origin med credentials
Denna kombination är den farligaste och blockeras av webbläsare — men att den förekommer tyder på en felkonfiguration som kan fungera i icke-webbläsarklienter:
Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true
Wildcard (*) och credentials: true kan inte kombineras på ett säkert sätt. Om du behöver autentiserade cross-origin-anrop måste du ange ett specifikt origin.
Spegling av requestens Origin-header utan validering
Vissa servrar returnerar dynamiskt samma Origin-header som inkom i requesten:
Exempel på en dålig konfiguration
response.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin')
Detta innebär i praktiken att alla origins — inklusive skadliga — tillåts göra autentiserade anrop till ditt API.
Hur du åtgärdar det
Alternativ 1 — Begränsa till kända origins (rekommenderas)
Upprätthåll en allowlist med betrodda origins och returnera endast dessa:
ALLOWED_ORIGINS = {'https://app.dindomän.se', 'https://admin.dindomän.se'}
origin = request.headers.get('Origin', '')
if origin in ALLOWED_ORIGINS:
response.headers['Access-Control-Allow-Origin'] = origin
response.headers['Access-Control-Allow-Credentials'] = 'true'
Alternativ 2 — Använd * endast för helt publika endpoints
Om ett API-endpoint endast returnerar publik data och aldrig använder cookies eller autentisering kan wildcard användas:
Access-Control-Allow-Origin: *
Kombinera aldrig detta med Access-Control-Allow-Credentials: true.
Alternativ 3 — Undvik CORS helt för känsliga API:er
Om din frontend och ditt API ligger på samma origin behövs inga CORS-headers alls. Hosta dem på samma domän eller använd en reverse proxy för att exponera dem som en enhet.
Hur ExposureIndex upptäcker detta
Scannern skickar testförfrågningar med en manipulerad Origin-header (t.ex. https://evil.example.com) och kontrollerar om servern speglar tillbaka den i Access-Control-Allow-Origin. Om ett godtyckligt origin speglas tillbaka i kombination med Allow-Credentials: true flaggas detta som en sårbarhet med hög allvarlighetsgrad.
Senast uppdaterad: March 28, 2026