JWT bez kontrolní logiky: kde tokeny tiše selhávají: Różnice pomiędzy wersjami

Z Mazovia
Utworzono nową stronę "Začnete tím, že si nainstalujete TypeScript globálně nebo lokálně do projektu a vytvoříte konfigurační soubor tsconfig.json. V něm nastavíte cíl kompilace, povolíte přísné kontroly a určíte, kam se má výsledný JavaScript ukládat. Pro nový projekt je rozumné zapnout "strict": true. Zpočátku to bolí, protože kompilátor hlásí i to, co jste dřív přehlíželi. Vyplatí se to ale vydržet: přísný režim vás naučí psát typy poř…"
 
mNie podano opisu zmian
 
Linia 1: Linia 1:
Začnete tím, že si nainstalujete TypeScript globálně nebo lokálně do projektu a vytvoříte konfigurační soubor tsconfig.json. V něm nastavíte cíl kompilace, povolíte přísné kontroly a určíte, kam se má výsledný JavaScript ukládat. Pro nový projekt je rozumné zapnout "strict": true. Zpočátku to bolí, protože kompilátor hlásí i to, co jste dřív přehlíželi. Vyplatí se to ale vydržet: přísný režim vás naučí psát typy pořádně a předejde řadě problémů později.<br><br>Nejčastější chyba je ukládat do store všechno, včetně stavu formuláře nebo otevřeného dialogu. Druhá je mutace stavu uvnitř reduceru, která se projeví až později. Třetí je obcházení Reduxu přímým voláním globální proměnné, čímž ztratíte veškerou výhodu dohledatelnosti. Pokud stav roste, rozdělte ho na menší reducery a kombinujte je. Až přestane být přehledný, není to důvod přidávat další knihovny, ale vrátit se k návrhu dat.<br><br>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ů.<br><br>Napojení komponent na store patří co nejníž. Nespojujte celé stránky, když stačí jedna položka seznamu. Komponenta má dostat jen data, která opravdu vykresluje, a jen akce, které sama vyvolává. Přepočítávejte selektory, které vracejí nový objekt nebo pole, jinak se komponenta překresluje při každé změně store. Typický problém je také příliš mnoho akcí pro jednu uživatelskou činnost; sloučte je do jedné, která popíše celý záměr.<br><br>Struktura projektu se vyplatí řešit dřív, než napíšete dvacátou routu. Rozdělte kód na trasy, controllery a vrstvu pro přístup k datům. Jeden soubor s pěti sty řádky se nedá testovat ani rozumně upravovat. Konfiguraci a tajné klíče držte mimo zdrojový kód, ideálně v proměnných prostředí, a nikdy je necommitujte do repozitáře. Stejně tak si hlídejte, co posíláte klientovi: chybová odpověď nemá obsahovat stack trace ani interní detaily.<br><br>Kdy se z pokrytí stává past Pokrytí přestává být užitečné ve chvíli, kdy se stane cílem místo nástroje. Typickým projevem je test, který zavolá funkci, ale nekontroluje výsledek. Nebo testy, které jen procházejí kód, aby zvýšily procento. Dalším varovným signálem je snaha dostat se na sto procent za každou cenu. Poslední procenta obvykle znamenají testy pro triviální gettery, obsluhu výjimek, které nikdy nenastanou, nebo mrtvý kód. Náklady rostou, přínos klesá.<br><br>Co hlídat při vydávání a ukládání Access token držte krátký, v řádu minut. Refresh token ukládejte jako serverovou relaci s možností odvolání, ne jako další JWT bez stavu. Do payloadu nepatří hesla, rodná čísla ani interní identifikátory, které nechcete ukázat. Pamatujte, že payload je jen base64, nikoli šifra. Pokud potřebujete skrýt obsah, použijte JWE, nebo raději držte citlivá data na serveru a do tokenu dejte pouze odkaz.<br><br>Implementaci naopak odhadujte až ve chvíli, kdy je analytika hotová a znáte rozsah. Tým pak pracuje s jasnými vstupy a může použít relativní odhady, například bodové nebo velikostní. Nezahrnujte do implementace práci, která patří analytice, a naopak. Pokud se během implementace objeví nové analytické otázky, není to selhání odhadu, ale signál, že analytická část nebyla dotažená. Řešte to jako samostatnou položku, ne jako „překvapení" uvnitř sprintu.<br><br>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.<br><br>Praktické pravidlo: pokud test neumí selhat při změně logiky, pravděpodobně nic neověřuje. Zkuste mutační testování na menším vzorku kódu. Rychle ukáže, které testy jsou jen dekorace. Pokud mutace přežijí, máte sice vysoké pokrytí, ale slabou sadu testů. To je přesně ten okamžik, kdy je lepší číslo ignorovat a věnovat se kvalitě assertions.<br><br>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ů.
CSS se připojuje buď přímo do dokumentu, nebo jako samostatný soubor. Samostatný soubor je lepší, protože se stejné styly dají použít na více stránkách a prohlížeč si je uloží do mezipaměti. Selektorů existuje několik typů: podle názvu značky, podle třídy a podle identifikátoru. Třídy se používají opakovaně, identifikátor má být na stránce jen jednou. Záměna těchto dvou věcí vede k nepředvídatelným výsledkům a kódu, kterému po týdnu nikdo nerozumí.<br><br>Parametrizované dotazy bezpečně oddělí data od kódu, ale jen pro hodnoty, které patří do klauzulí WHERE, VALUES nebo SET. Jakmile aplikace potřebuje měnit název sloupce pro řazení nebo název tabulky podle vstupu od uživatele, musí přijít jiná obrana. Řešením není escapování uvozovek, ale mapování na pevný seznam povolených hodnot. Uživatel pošle klíč, aplikace ho přeloží na konkrétní název sloupce. Pokud klíč v seznamu není, dotaz se vůbec nesestaví a vrátí se chyba. Tím zmizí prostor pro vložení poddotazu nebo podmínky, která vrátí celou tabulku.<br><br>Typická chyba je dlouhé držení větve a čekání na schválení. Další je force push do sdílené větve, který smaže kolegům jejich commity. Vyhněte se také commitům se zprávami typu „oprava" nebo „úpravy". Zaveďte si pravidlo, že hlavní větev je chráněná a přímý push do ní není možný. Tým, který dodržuje krátké větve, jasné zprávy a povinnou kontrolu, stráví méně času hašením požárů a více psaním kódu, který funguje.<br><br>Začněte tím, že si prohlédnete, které části kódu jsou kritické. Platební logika, výpočty, zpracování vstupů od uživatele, přístupová práva. Tam má pokrytí smysl a tam se vyplatí investovat čas. Naopak gettery, settery, konfigurační soubory nebo jednoduché přepisy hodnot testovat nemusíte. Napsat pro ně test je snadné, ale hodnota je nulová a jen zvyšuje číslo.<br><br>Praktický postup: místo plošného čísla si ve CI nastavte prahy jen pro nové nebo změněné soubory. Zavedený kód nechte být, dokud se ho nedotknete. Pro kritické moduly nastavte ručně ověřený seznam scénářů, které musí být pokryté vždy. Testy pište tak, aby selhaly, když je logika rozbitá — zkuste si je dočasně podvrátit a sledujte, zda skutečně spadnou.<br><br>Kdy měření přestává být užitečné Pokud se pokrytí stane cílem samo o sobě, začnou vznikat testy šité na míru metrice. Typický příklad: vývojář obalí celou metodu jedním testem, který ověří jen to, že nespadne. Řádek se započítá, ale chování zůstane neověřené. Další častá chyba je ignorování větví. Nástroj hlásí vysoké pokrytí, protože každý řádek proběhl, ale podmínky s okrajovými hodnotami zůstaly netknuté.<br><br>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.<br><br>Formuláře jsou místo, kde se ztrácí nejvíc konverzí. Každé pole navíc snižuje ochotu dokončit akci. Ptejte se jen na to, co skutečně potřebujete, a zbytek zjistěte později. Popisky patří nad pole, ne dovnitř jako placeholder, protože ten po napsání zmizí a uživatel zapomene, co vyplňuje. Validujte při odchodu z pole, ne při každém stisku klávesy. Chybová zpráva má být u konkrétního pole a konkrétní, ne souhrnná dole pod formulářem.<br><br>Pokrytí kódu testy se často bere jako univerzální metrika kvality. Jenže číslo samo o sobě nic neříká o tom, zda testy skutečně odhalují chyby. Tým, který honí stovku procent, často píše testy, jež procházejí, ale nic netestují. První krok je přestat se ptát „kolik procent máme" a začít se ptát „co nám ty testy skutečně zachytí".<br><br>Pozor na dvě věci, které lidi pletou. Za prvé, vysoké pokrytí neznamená kvalitu. Můžete mít devadesát procent a přesto propouštět chyby do produkce. Za druhé, nízké pokrytí nemusí být problém, pokud jde o kód, který se nemění a je triviální. Rozhodujte podle rizika, ne podle čísla v přehledu.<br><br>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á.<br><br>Co hlídat při vydávání a ukládání Access token držte krátký, v řádu minut. Refresh token ukládejte jako serverovou relaci s možností odvolání, ne jako další JWT bez stavu. Do payloadu nepatří hesla, rodná čísla ani interní identifikátory, které nechcete ukázat. Pamatujte, že payload je jen base64, nikoli šifra. Pokud potřebujete skrýt obsah, použijte JWE, nebo raději držte citlivá data na serveru a do tokenu dejte pouze odkaz.

Aktualna wersja na dzień 19:14, 1 paź 2026

CSS se připojuje buď přímo do dokumentu, nebo jako samostatný soubor. Samostatný soubor je lepší, protože se stejné styly dají použít na více stránkách a prohlížeč si je uloží do mezipaměti. Selektorů existuje několik typů: podle názvu značky, podle třídy a podle identifikátoru. Třídy se používají opakovaně, identifikátor má být na stránce jen jednou. Záměna těchto dvou věcí vede k nepředvídatelným výsledkům a kódu, kterému po týdnu nikdo nerozumí.

Parametrizované dotazy bezpečně oddělí data od kódu, ale jen pro hodnoty, které patří do klauzulí WHERE, VALUES nebo SET. Jakmile aplikace potřebuje měnit název sloupce pro řazení nebo název tabulky podle vstupu od uživatele, musí přijít jiná obrana. Řešením není escapování uvozovek, ale mapování na pevný seznam povolených hodnot. Uživatel pošle klíč, aplikace ho přeloží na konkrétní název sloupce. Pokud klíč v seznamu není, dotaz se vůbec nesestaví a vrátí se chyba. Tím zmizí prostor pro vložení poddotazu nebo podmínky, která vrátí celou tabulku.

Typická chyba je dlouhé držení větve a čekání na schválení. Další je force push do sdílené větve, který smaže kolegům jejich commity. Vyhněte se také commitům se zprávami typu „oprava" nebo „úpravy". Zaveďte si pravidlo, že hlavní větev je chráněná a přímý push do ní není možný. Tým, který dodržuje krátké větve, jasné zprávy a povinnou kontrolu, stráví méně času hašením požárů a více psaním kódu, který funguje.

Začněte tím, že si prohlédnete, které části kódu jsou kritické. Platební logika, výpočty, zpracování vstupů od uživatele, přístupová práva. Tam má pokrytí smysl a tam se vyplatí investovat čas. Naopak gettery, settery, konfigurační soubory nebo jednoduché přepisy hodnot testovat nemusíte. Napsat pro ně test je snadné, ale hodnota je nulová a jen zvyšuje číslo.

Praktický postup: místo plošného čísla si ve CI nastavte prahy jen pro nové nebo změněné soubory. Zavedený kód nechte být, dokud se ho nedotknete. Pro kritické moduly nastavte ručně ověřený seznam scénářů, které musí být pokryté vždy. Testy pište tak, aby selhaly, když je logika rozbitá — zkuste si je dočasně podvrátit a sledujte, zda skutečně spadnou.

Kdy měření přestává být užitečné Pokud se pokrytí stane cílem samo o sobě, začnou vznikat testy šité na míru metrice. Typický příklad: vývojář obalí celou metodu jedním testem, který ověří jen to, že nespadne. Řádek se započítá, ale chování zůstane neověřené. Další častá chyba je ignorování větví. Nástroj hlásí vysoké pokrytí, protože každý řádek proběhl, ale podmínky s okrajovými hodnotami zůstaly netknuté.

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.

Formuláře jsou místo, kde se ztrácí nejvíc konverzí. Každé pole navíc snižuje ochotu dokončit akci. Ptejte se jen na to, co skutečně potřebujete, a zbytek zjistěte později. Popisky patří nad pole, ne dovnitř jako placeholder, protože ten po napsání zmizí a uživatel zapomene, co vyplňuje. Validujte při odchodu z pole, ne při každém stisku klávesy. Chybová zpráva má být u konkrétního pole a konkrétní, ne souhrnná dole pod formulářem.

Pokrytí kódu testy se často bere jako univerzální metrika kvality. Jenže číslo samo o sobě nic neříká o tom, zda testy skutečně odhalují chyby. Tým, který honí stovku procent, často píše testy, jež procházejí, ale nic netestují. První krok je přestat se ptát „kolik procent máme" a začít se ptát „co nám ty testy skutečně zachytí".

Pozor na dvě věci, které lidi pletou. Za prvé, vysoké pokrytí neznamená kvalitu. Můžete mít devadesát procent a přesto propouštět chyby do produkce. Za druhé, nízké pokrytí nemusí být problém, pokud jde o kód, který se nemění a je triviální. Rozhodujte podle rizika, ne podle čísla v přehledu.

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á.

Co hlídat při vydávání a ukládání Access token držte krátký, v řádu minut. Refresh token ukládejte jako serverovou relaci s možností odvolání, ne jako další JWT bez stavu. Do payloadu nepatří hesla, rodná čísla ani interní identifikátory, které nechcete ukázat. Pamatujte, že payload je jen base64, nikoli šifra. Pokud potřebujete skrýt obsah, použijte JWE, nebo raději držte citlivá data na serveru a do tokenu dejte pouze odkaz.