JWT bez kontrolní logiky: kde tokeny tiše selhávají: Unterschied zwischen den Versionen

Aus Rettungsdienst-Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Prvním krokem je určit, kdo je autorem a kdo drží práva. U firemních projektů platí, že práva zaměstnanců přecházejí na zaměstnavatele jen tehdy, pokud je to smluvně ošetřeno. U externích spolupracovníků je nutné mít písemné přiřazení práv, jinak nemáte oprávnění licence udělovat. Teprve poté má smysl řešit, kterou licenci zvolit.<br><br>Prvním praktickým krokem je otestovat databázi na vlastním vzorku dat, ne na…“)
 
K
 
Zeile 1: Zeile 1:
Prvním krokem je určit, kdo je autorem a kdo drží práva. U firemních projektů platí, že práva zaměstnanců přecházejí na zaměstnavatele jen tehdy, pokud je to smluvně ošetřeno. U externích spolupracovníků je nutné mít písemné přiřazení práv, jinak nemáte oprávnění licence udělovat. Teprve poté má smysl řešit, kterou licenci zvolit.<br><br>Prvním praktickým krokem je otestovat databázi na vlastním vzorku dat, ne na cizím demu. Vezměte reprezentativní sadu záznamů – včetně okrajových případů, jako jsou prázdné hodnoty, dlouhé texty, znaky s diakritikou nebo neobvyklá data. Nahrajte je do testovací instance a zkuste spustit dotazy, které odpovídají reálnému provozu. Sledujte přitom chování při chybách: co se stane, když dotaz selže, když dojde místo na disku nebo když se přeruší spojení. Právě v těchto situacích se ukáže, zda je podpora skutečná, nebo jen formální.<br><br>Komenty piš tam, kde vysvětlují proč, ne co. // zvýšíme počítadlo nad i++ je zbytečný. // API vrací data bez pole items, proto kontrola má smysl. Stejně tak se vyhni zakomentovanému kódu, který tam zůstal po experimentu. Buď ho smaž, nebo si ho nech v historii změn. V editoru nemá co dělat.<br><br>Prvním krokem je zvolit si nástroj a nainstalovat si ho lokálně. Většina vývojářů skončí u Gitu, protože je všude a funguje i bez připojení k síti. Po instalaci si nastavte jméno a e-mail, které se budou zapisovat do historie. Pak si v kořeni projektu spusťte inicializaci repozitáře. Tím vznikne skrytá složka, do které nástroj ukládá všechny změny. Tuhle složku nikdy needitujte ručně a nikdy ji nemažte, pokud si nejste jistí, co děláte.<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>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>Poslední věc, kterou je potřeba zařídit brzy, je záloha historie mimo váš počítač. Lokální repozitář vás ochrání před vlastními chybami, ale ne před selháním disku. Přidejte si vzdálené úložiště a po každé dokončené práci tam změny odešlete. Tím získáte třetí vrstvu jistoty: máte aktuální stav, máte historii a máte i kopii mimo stroj. Až tohle budete dělat automaticky, přestanete řešit, co jste kde rozbili, a začnete řešit skutečnou práci.<br><br>Jakmile zvládnete ukládat změny, naučte se pracovat s větvemi. Větev je oddělená linka vývoje, na které můžete zkoušet nové věci, aniž byste rozbili funkční verzi. Pro malé úpravy stačí jedna hlavní větev, pro větší práci si vytvořte novou, dokončete ji a pak ji sloučte zpět. Při slučování může dojít ke konfliktu, když stejné místo upravily dvě větve. Není to katastrofa – otevřete soubor, vyberte správnou variantu a uložte výsledek.<br><br>Druhá častá chyba je ukládat změny příliš pozdě a příliš mnoho najednou. Jeden obří zápis s popisem „úpravy" vám při hledání chyby nepomůže. Ukládejte po menších kusech, vždycky když dokončíte jednu logickou věc – opravu chyby, novou komponentu, úpravu stylů. Ke každému uložení napište krátkou zprávu, která říká, co se změnilo a proč. Budete si za měsíc děkovat, až budete potřebovat zjistit, kdy se něco pokazilo.<br><br>Co patří do historie a co ne Než uděláte první uložení stavu, vytvořte soubor, který řekne nástroji, co má ignorovat. Do něj patří složky s nainstalovanými závislostmi, dočasné soubory, lokální konfigurace s hesly a cokoliv, co se generuje automaticky při buildu. Typická chyba začátečníka je, že tam tyhle věci nedá a pak řeší konflikty v souborech, které nikdy neměl verzovat. Platí jednoduché pravidlo: do historie patří jen to, co jste napsali vy a co je potřeba ke spuštění projektu na jiném počítači.<br><br>Stavy, na které se zapomíná Největší rozdíl mezi prototypem a použitelnou aplikací jsou stavové obrazy. Vývojář často řeší jen ten šťastný případ: data dorazila, vše se vykreslilo. Ale co prázdný seznam? Co načítání? Co chyba sítě? Co neplatný vstup? Každá z těchto situací potřebuje vlastní obrazovku nebo alespoň text. Prázdný stav nemá být bílá plocha, ale krátká věta a výzva k akci. Chybová hláška nemá být „Error 500", ale co se pokazilo a co má uživatel udělat dál. Načítání delší než zlomek sekundy potřebuje indikaci, jinak uživatel klikne znovu.
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ě.<br><br>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.<br><br>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.<br><br>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í.<br><br>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ý.<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>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ů.<br><br>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.<br><br>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.<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>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.

Aktuelle Version vom 1. Oktober 2026, 21:07 Uhr

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.