JWT bez kontrolní logiky: kde tokeny tiše selhávají

Aus Rettungsdienst-Wiki
Zur Navigation springen Zur Suche springen

Nakonec konzistence. Formátování, středníky, uvozovky, pořadí importů – to vše by mělo být stejné v celém projektu. Nemá cenu dohadovat, kdo má pravdu; nastavte jeden nástroj na formátování a nechte ho rozhodovat. Kód, který se neformátuje ručně, se čte výrazně lépe a v recenzích se pak řeší logika, ne mezery. Čistý kód není otázka vkusu, ale disciplíny, kterou oceníte především ve chvíli, kdy do něj budete muset sáhnout po delší době.

Většina juniorních vývojářů posílá desítky životopisů do firem, které inzerují volnou pozici, a diví se, že odpověď nepřijde. Problém nebývá v kvalitě kódu, ale ve způsobu, jakým hledáte. Rozdíl mezi soutěží o inzerát a hledáním přes lidi, které znáte, je zásadní. Inzerát vidí stovky uchazečů, reference vidí jeden člověk, který vás doporučí. Začněte u sebe: napište si seznam všech, kdo pracuje v technologiích — bývalí spolužáci, učitelé, účastníci meetupů, správci open-source projektů, kde jste přispěli. Těm napište krátkou zprávu, ne „hledám práci", ale konkrétní dotaz na jejich zkušenost.

Verzování začíná jediným příkazem, ale většina problémů vzniká ještě před ním. Než poprvé spustíš git init, nastav si jméno a e-mail, které se zapisují do každého commitu: git config --global user.name "Jan Novák" a git config --global user.email "jan@example.com". Bez toho Git odmítne commit vytvořit nebo použije nesmyslné údaje, které se pak těžko zpětně mění. Stejně důležité je rozhodnout, co do repozitáře nepatří — soubory s hesly, lokální konfigurace, build výstupy. Vytvoř soubor .gitignore dřív, než uděláš první commit, protože dodatečné vyřazování už sledovaných souborů je otrava.

Druhá věc, která rozhoduje o všem ostatním, je pojmenování. Proměnná s názvem data nebo temp neříká nic a za týden ji budete dohledávat podle toho, kde se používá. Pište názvy tak, aby věta „vypočítej celkovou cenu včetně daně" byla z kódu čitelná bez komentáře. U funkcí používejte sloveso a předmět: spocitejCenu, nactiUzivatele, zvalidujEmail. U booleanů tvar otázky: jePrihlaseny, maOpravneni. Vyhněte se zkratkám, kterým rozumíte jen vy v den psaní.

Poslední praktická rada: začněte ještě před nástupem. Projděte si repozitář firmy, přečtěte si dokumentaci a připravte si vývojové prostředí. První den se pak ptáte na věci, které se týkají práce, ne na to, kde je káva. Kariéra v IT není o tom, kdo toho ví nejvíc, ale kdo vydrží být konzistentně užitečný.

Při ověřování si dejte pozor na časové posuny. Malá tolerance u exp a nbf je v pořádku, ale nesmí být v minutách. Stejně tak kontrolujte, že token nebyl použit před nbf. Odvolávání je slabina bezstavových tokenů: blacklist podle jti nebo krátká platnost s rotací refresh tokenů řeší většinu případů. Nikdy neposílejte token v URL, dostane se do logů a refererů.

Typická chyba je ukládání tokenu do localStorage a následné XSS. HttpOnly cookie s SameSite je bezpečnější, ale vyžaduje ochranu proti CSRF. Další častá chyba je zapomenutý aud při více službách: token vydaný pro jednu API projde i do druhé. Testujte negativní scénáře, ne jen šťastnou cestu. Podepište token klíčem, který umíte rotovat, a staré klíče nechte ověřovat jen po dobu platnosti vydaných tokenů.

Základní pravidlo zní: pokrytí měřte tam, kde může selhání způsobit reálnou škodu. Platební logika, výpočty, validace vstupů nebo stavové automaty si vysoké pokrytí zaslouží. Naopak jednoduché gettery, konfigurační konstanty nebo automaticky generovaný kód nemá smysl honit na sto procent. Pokud tým tráví čas psaním testů jen proto, aby v reportu svítilo vyšší číslo, přesunul se od kvality k vanity metrice.

Pokrytí přestává být užitečné ve chvíli, kdy se stane cílem místo nástrojem. Jakmile tým píše testy kvůli reportu, přestává řešit, co má být ověřeno. Stejně tak ztrácí smysl, když se jím poměřují lidé nebo když se porovnávají nesrovnatelné projekty. Číslo bez kontextu neřekne nic o tom, zda je software spolehlivější. Říká jen, kolik řádků bylo spuštěno.

JWT tokeny se nasazují jako univerzální řešení autentizace, ale bez správně nastavené validace se z nich stává jen podepsaný kus textu, kterému server slepě věří. Nejčastější chyba není v algoritmu, nýbrž v tom, že se token dekóduje a jeho obsah se použije bez ověření podpisu a všech povinných polí. Útočník pak může změnit sub nebo role a dostat se tam, kam nemá.

Praktický postup je jednoduchý. Nejprve si určete, které části kódu jsou rizikové, a pro ně nastavte smysluplný práh. Potom sledujte, zda nové změny pokrytí nesnižují – ne plošně, ale v dotčených modulech. Dále kontrolujte, zda testy skutečně selžou, když do kódu zavedete chybu. Teprve potom má číslo vypovídací hodnotu. Bez tohoto ověření je pokrytí jen dekorace.