Den dolda fällan med skiftlägeskänslighet i din webbinfrastruktur

Den dolda fällan med skiftlägeskänslighet i din webbinfrastruktur

Maj 06, 2026 security dns case-sensitivity web infrastructure authentication best practices domain management

Verskaps-krisen som alla glömmer

Du kodar din webbapp. Allt flyter på i dev-miljön. Staging-servern beter sig perfekt. Men i produktion krashar det utan anledning – eller så dyker säkerhetsforskare upp med luckor du aldrig tänkt på.

Ofta ligger felet inte i koden eller valideringen. Det är versaler och gemener som hanteras olika på olika ställen.

Varför versaler skapar kaos

Alla vet att domain-namn ignorerar versaler. example.com, Example.Com och EXAMPLE.COM pekar sammastans. Enkelt.

Men tänk på:

  • E-postadresser i ditt auth-system?
  • User-ID:n i databasen?
  • Filvägar i cloud storage?
  • API-endpoints från externa tjänster?
  • SSL-validering?

När din infra hanterar case folding olika skapar du en dörr öppen för attacker.

Ett verkligt attack-scenario

Tänk dig: Appen sparar e-post i gemener i databasen. Bra vana. Men OAuth-leverantören skickar Anna.Berg@exempel.se med versaler. Din login kod jämför strängar rakt av, utan normalisering.

Angriparen skapar konto med anna.berg@exempel.se. Sen loggar de in med den versala varianten. Om hanteringen skiljer sig kan de:

  • Slippa rate limits (ses som ny user)
  • Dubbla konton med högre rättigheter
  • Undvika loggar
  • Neka åtkomstkontroller

Värre med:

IDN-domäner – Unicode-regler varierar per språk. Turkisk 'ı' utan prick kraschar enkla ASCII-logiker. Vissa tecken saknar versal form.

Cloud storage – AWS S3-objekt är case-sensitive, men buckets inte. Fel här leder till dataläckage eller privilege escalation.

DNS – Queries är case-insensitive, men din app-validering kanske inte. Wildcard-cert och CNAME blir svaga punkter.

Så skyddar du din setup

1. Sätt normaliseringsregler tidigt

Bestäm hur versaler hanteras i appen, inte i databasen. Normalisera input direkt vid inmatning.

# Normalisera vid gränsen
def fixa_email(email):
    return email.lower().strip()

def logga_in(email):
    normal = fixa_email(email)
    user = User.query.filter_by(email=normal).first()
    return user

2. Välj Unicode-säkra bibliotek

För internationellt innehåll: Lita inte på hemmagjorda lösningar.

  • Python: unicodedata
  • JavaScript: String.localeCompare()
  • Go: strings med Unicode-stöd

3. Testa över hela kedjan

Appen lever inte ensam. Kolla case-beteende hos:

  • DNS-leverantörens API
  • SSL-utfärdare
  • OAuth-partners
  • Cloud storage
  • CDN-regler

Dokumentera allt för konsistens.

4. Validera input stenhårt

Lita aldrig på externa system. Normalisera vid varje integration.

// Innan externa API-anrop
const fixa_for_api = (input, typ = 'lowercase') => {
  let normal = typ === 'lowercase' 
    ? String(input).toLowerCase() 
    : String(input);
  return normal.trim();
};

5. Logga versalfel

Sätt upp varningar för misstänkta variationer:

def kolla_versaler(email):
    normal = email.lower()
    if email != normal:
        logger.warning(f"Versalvariation: {email} → {normal}")
        # Kolla efter attacker

6. NameOceans bästa praxis för domäner och DNS

Vid domain-registrering eller DNS-konfig hos NameOcean:

  • Använd alltid gemener i koden för domains
  • Håll DNS-poster konsekventa
  • Utnyttja vår case-insensitive API
  • Dokumentera strategin i din IaC

Slutsatsen

Säkerhet handlar inte bara om lösenord och HTTPS. Det är hela ekosystemets datahantering. En versalskillnad kan sprida sig genom auth, storage och API:er.

De som fixar det här tidigt:

  1. Ifrågasätter allt – Anta inget om normalisering
  2. Testar kanter – Versaler i säkerhetstesten
  3. Dokumenterar – Beskriv exakt hur systemen funkar
  4. Tvingar standard – Ett sätt överallt

Dina framtida säkerhetsgranskare (eller angripare) uppskattar det.

Read in other languages:

RU BG EL CS UZ TR FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN