JWT bez kontrolní logiky: kde tokeny tiše selhávají: Różnice pomiędzy wersjami
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: | ||
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.