A kis- és nagybetűk rejtett bombája a webes infrastruktúrában
A kisbetű-nagysbetű csapda, ami senki sem említ
Készíted a webalkalmazást. A fejlesztői gépen minden szuperül fut. A teszt szerveren is tökéletes. Aztán élesben váratlan hibák jönnek, vagy biztonsági szakértők találnak lyukakat, amikre sosem gondoltál.
Sokan a kódban keresik a hibát, vagy a validáció hiányát hibáztatják. Pedig sokszor egy egyszerűbb dolog áll a háttérben: a rendszered máshogy kezeli a kis- és nagybetűket, mint kéne.
Miért olyan fontos a betűméret?
Tudjuk, hogy a domain nevek nem érzékenyek a nagybetűkre. example.com, Example.com vagy EXAMPLE.COM – mind ugyanaz. Ennyi, ugye?
De mi a helyzet ezzel:
- Az autentikációban használt email címekkel?
- Az adatbázisban tárolt felhasználói azonosítókkal?
- A felhőben lévő fájlnevekkel?
- A külső API végpontjaival?
- Az SSL tanúsítványok ellenőrzésével?
Ha a rendszered különböző részei eltérően alakítják át a szövegeket (case folding), máris támadási felületet hoztál létre.
Egy valós támadási példa
Tegyük fel, az appod email alapján azonosítja a felhasználókat, és az adatbázisban kisbetűsen tárolod őket. Logikus lépés. De az OAuth szolgáltatód John.Smith@gmail.com formában küldi vissza, vegyes betűmérettel. A te kódod nem normálizálja, csak összehasonlít.
Támadó regisztrál john.smith@gmail.com-mal, belép, aztán kipróbálja a John.Smith@gmail.com-ot. Ha a kezelést rosszul csinálod, átcsúszhat:
- A rátalimitálást megkerüli (más userként látja)
- Dupla fiókot csinál, magasabb jogosultsággal
- Kikerüli a biztonsági naplózást
- Elér olyan erőforrást, ami nem az övé
Ez még veszélyesebb nemzetközi domain nevek (IDN) esetén. A Unicode szabályok nyelvek szerint változnak. Törökországban a pont nélküli 'i' megzavarja a sima ASCII logikát. Vannak karakterek, amiknek nincs nagybetűs párja.
Felhő tárolókban, mint AWS S3, az objektum kulcsok érzékenyek a betűméretre, de a bucket nevek nem. Innen adatszivárgás vagy jogosultságemelés jöhet.
DNS rekordoknál a lekérdezések nem érzékenyek, de a te appod validációja lehet. Wildcard tanúsítványok és CNAME ellenőrzések támadási pontok lesznek.
Hogyan védd meg a rendszert
1. Egységes normálizációs szabályok
Az app szintjén döntsd el a szabályokat, ne az adatbázisban. Minden bemenő adatot azonnal alakíts át.
# Jól van: határnál normálizálunk
def email_norm(email):
return email.lower().strip()
def bejelentkezes(email):
norm_email = email_norm(email)
felhasznalo = User.query.filter_by(email=norm_email).first()
return felhasznalo
2. Unicode-kompatibilis könyvtárak
Nemzetközi tartalomnál ne találj ki semmit. Használj bevált eszközöket:
- Python:
unicodedata - JavaScript:
String.localeCompare() - Go:
stringscsomag Unicode támogatással
3. Teszteld az egész láncot
Az appod nem áll egyedül. Ellenőrizd a betűkezelést:
- DNS szolgáltatód API-ján
- SSL kiadó validációján
- Külső OAuth-on
- Felhő tárolódon
- CDN szabályain
Írd le, hogyan viselkedik mindegyik, és tedd egységessé.
4. Szigorú bemeneti ellenőrzés
Ne hidd, hogy a külső rendszerek ugyanúgy kezelik. Mindenhol validálj és normálizálj.
// API hívás előtt
const api_norm = (bemeno, stilus = 'kisbetus') => {
let norm = stilus === 'kisbetus'
? String(bemeno).toLowerCase()
: String(bemeno);
return norm.trim();
};
5. Naplózd a betűeltéréseket
Figyelmeztess gyanús variációkra:
def betu_eltérés(email):
norm = email.lower()
if email != norm:
logger.warning(f"Betűeltérés: {email} -> {norm}")
# Nézd meg, támadás-e
6. NameOcean legjobb gyakorlatok
Domain regisztrációkor vagy DNS beállításkor NameOcean-nél tartsd ezt:
- Mindig kisbetűs domain nevet a kódban
- DNS rekordokat egységes betűszabállyal tárold
- Használd API-nk nem érzékeny funkcióit
- Írd le a stratégiát az infrastruktúra-kódban
A tanulság
Biztonság nem csak erős jelszó és HTTPS. Az egész ökoszisztémát kell értened. Egy apró betűkezelési hiba végigszalad az autentikáción, tároláson és API-kon.
Aki időben rájön:
- Kérdőjelezi a feltételezéseket – Ne vedd evidensnek a normálizálást
- Teszteli a szélsőségeket – Betűvariációk a biztonsági tesztekben
- Dokumentál – Pontosan írd le minden rendszer viselkedését
- Következetesen normálizál – Válassz szabványt, és tartsd be mindenhol
A jövőbeli kutatók (vagy támadók) hálásak lesznek.