Verze systému a zpětná kompatibilita nejsou formali
Mezi typické chyby patří i testování pouze v ideální síti. Přepněte zařízení do režimu s vysokou latencí, vypněte data uprostřed nahrávání souboru nebo simulujte ztrátu připojení. Sledujte, zda aplikace zobrazí srozumitelnou chybu, zda se data neztratí a zda se po obnovení připojení stav sám opraví. Právě tyto situace rozhodují o tom, zda uživatel aplikaci po prvním problému otevře znovu.
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ákladem je ověřit podpis přesně tím algoritmem, který očekáváte. Nikdy nenechávejte knihovnu, aby si algoritmus vybrala podle hlavičky alg z tokenu. Pokud aplikace podporuje HS256 i RS256, musíte dopředu rozhodnout, který použijete, a ostatní odmítnout. Zvlášť nebezpečná je kombinace, kdy se veřejný klíč z RS256 dá podstrčit jako HMAC secret. Vždy porovnávejte iss, aud a exp; token bez expirace je jen trvalý přístupový klíč v cizích rukou.
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á.
TypeScript není jiný jazyk, je to JavaScript s typy. Kód se před spuštěním přeloží do běžného JavaScriptu, takže prohlížeč ani Node.js nic nového nepotřebují. Rozdíl je v tom, že už při psaní víte, jaká data funkce očekává a co vrací. U malého skriptu na jednu stránku to může být zbytečná práce. Ve chvíli, kdy projekt roste, přibývají lidé nebo se mění datové struktury, se ale bez typů opravují chyby, které mohly být odhaleny dřív, než kód vůbec poběží.
Poslední věc je výkon. Když má IDE indexovat všechny jazyky najednou, zpomalí se start i našeptávání. Vyluč z indexování buildovací složky, cache a vygenerované soubory. Pokud to jde, zapni jazykové servery jen pro jazyky, na kterých právě pracuješ. Pravidelně kontroluj, jestli některý plugin neběží naprázdno. Rozdělení jazykových vrstev a jasná pravidla v repozitáři ti ušetří víc času než jakákoli zkratka v editoru.
Nastav per-projektové interprety a SDK Druhý krok je explicitní přiřazení runtime prostředí. Každý jazyk by měl mít v projektu jasně danou verzi: virtuální prostředí pro Python, konkrétní JDK pro Javu, konkrétní verzi Node pro frontend. V IDE to znamená nastavit interpret ne globálně, ale pro daný projekt nebo modul. Když to neuděláš, bude ti editor našeptávat funkce z verze, kterou v produkci vůbec nemáš, a buildy se budou chovat jinak než lokální nápověda.
Dále nastav jazyk souborů ručně pro formáty, které jsou nejednoznačné. Soubory jako .h, .m nebo šablony s více syntaxemi editor často zařadí špatně. Přepni jazyk konkrétního souboru a případně si ulož pravidlo podle přípony nebo cesty. Pomůže i to, že si v projektu vytvoříš složky podle jazyka a ne podle funkce. Strom, kde je Java, Python a TypeScript promíchaný v jedné složce, nutí IDE i tebe neustále přepínat kontext.
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ů.
Více jazyků v jednom repozitáři není výjimka, ale běžný stav. Backend v Javě, skripty v Pythonu, konfigurace v YAML, frontend v TypeScriptu a k tomu SQL migrace. Pokud IDE otevřeš s výchozím nastavením, dostaneš mix varování, rozbité formátování a pomalé našeptávání. Nejde o to naučit se pět editorů. Jde o to přizpůsobit jeden nástroj tak, aby každý jazyk dostal vlastní pravidla a přitom zůstal jeden společný pracovní postup.
Jak mluvit o nejistotě, aniž byste zněli nejist
Nastavení ulož do repozitáře, aby platilo pro celý tým. Osobní klávesové zkratky a vzhled si nech zvlášť, ale pravidla pro jazyk, formátování a lintování patří do verzovaných souborů. Tím zmizí hádky o tom, čí editor přeformátoval cizí kód. Zároveň si nastav, aby se automatické formátování nespouštělo při každém uložení u všech jazyků. U cizího kódu je lepší formátovat jen změněné řádky, jinak vznikne obrovský diff, který nikdo nepřečte.
If you adored this write-up and you would such as to receive even more information pertaining to rekonstrukce koupelny krok za krokem kindly visit the page.
