JWT tokeny, které vám uniknou: nejčastější chyby při zabezpečení API
Když začnete s Gitem, většina návodů ukazuje jen příkazy. Ale skutečné problémy přicházejí ve chvíli, kdy potřebujete spojit práci z více větví, nebo když omylem přepíšete cizí změny. Než se pustíte do pokročilých triků, je důležité pochopit, jak Git ukládá historii. Každý commit je snímek celého projektu – ne jen rozdíl mezi verzemi. To znamená, že když provedete commit, uložíte kompletní stav složky. Pokud později sáhnete do historie a něco upravíte, můžete snadno rozbít práci ostatním.
Jak se vyhnout nejčastějšímu začátečnickému průšvihu Tím průšvihem je spojení větví, které se liší v mnoha souborech. Častá chyba: vy a kolega editujete stejný soubor, každý v jiné větvi. Vy uděláte commit, on také. Pak zkusíte sloučit a Git hlásí konflikt. Nejdůležitější je nezmatkovat. Otevřete soubor, najdete značky s dvojitými šipkami, přečtete obě verze a rozhodnete, co ponechat. Nikdy neprovádějte commit s konfliktem – nejprve ho vyřešte. Po úpravě nezapomeňte soubor přidat a teprve poté commitnout.
Vaše první aplikace by měla umět něco jednoduchého – třeba pozdravit uživatele a přečíst jeho jméno. Než začnete psát, ujasněte si, co od programu chcete. Například: „Zobrazím text, pak počkám na vstup od uživatele a nakonec vypíšu odpověď." Tento postup je čitelný a snadno se testuje. Při psaní kódu si dejte pozor na to, aby se každý příkaz ukončil středníkem. Čeština dělá v C# problém jen tehdy, když zapomenete na diakritiku – ale to je spíš vizuální záležitost. Skutečný problém nastává, když použijete místo středníku tečku nebo rovnou zapomenete uzavřít závorku. To jsou nejčastější chyby, které kompilátor hlásí.
Po migraci spusťte sadu testů, která porovná výsledky dotazů na obou databázích. Zaměřte se na dotazy s datem, textem a agregacemi. Typická chyba je v použití funkce DATE_FORMAT, kterou PostgreSQL nemá – musíte ji nahradit funkcí TO_CHAR. Ujistěte se, že vaše aplikace používá ovladač pro PostgreSQL a že je správně nakonfigurována pro práci s novým typem vrácených dat.
Další pastí je špatné použití příkazu reset. Mnoho začátečníků používá reset s tvrdým přepínačem, aby „odstranili" poslední commit. Tím ale zahodí i všechny změny v pracovním adresáři. Místo toho použijte reverz, který vytvoří nový commit s opačnou změnou. Tím se historie zachová a vy se vyhnete ztrátě dat. Pokud už reset použijete, nejprve si zálohujte důležité soubory nebo si zapamatujte hash commitu, ke kterému se chcete vrátit.
Jak si uspořádat workflow, aby vás větve nezahltily Před začátkem práce si vždy vytáhněte aktuální stav z hlavní větve a vytvořte novou větev z nejnovějšího commitu. Používejte výstižné názvy větví s číslem úkolu nebo krátkým popisem změny, třeba „feat/prihlasovani-formular" nebo „fix/oprava-ceny". Vyhnete se tak větvím s názvy jako „test" nebo „oprava2", které po týdnu nikdo nepřiřadí k žádnému úkolu. Zároveň si zvykněte na pravidelné commity s jasnými zprávami. Každý commit by měl obsahovat jednu logickou změnu a popis, co a proč se mění. Vyhnete se tak situaci, kdy v jednom commitu opravujete chybu i přidáváte novou funkci, což ztěžuje zpětnou kontrolu a reverty.
Další častou chybou je ignorování expirace tokenu. JWT obsahuje pole exp, ale pokud ho nenastavíte nebo nastavíte příliš dlouhou platnost, otevíráte dveře útočníkům, kteří ukradnou token a používají ho týdny. Nastavte expiraci na rozumnou dobu – obvykle 15 minut až několik hodin – a pro delší přístup použijte obnovovací tokeny, které mají vlastní životní cyklus a lze je bezpečně zneplatnit. Navíc vždy ověřujte nejen expiraci, ale i čas vydání (iat) a případně čas nepoužitelnosti (nbf), abyste zabránili použití tokenů, které ještě nebyly aktivovány.
Jak se vyhnout problémům s datovými typy a dotazy Nezapomeňte na rozdíly v práci s textem. PostgreSQL rozlišuje typy CHAR, VARCHAR a TEXT, ale v praxi se chovají podobně. Hlavní rozdíl je v porovnávání řetězců: PostgreSQL používá collation podle locale, které může být case-sensitive. Pokud vaše aplikace spoléhá na case-insensitive porovnávání, musíte použít ILIKE nebo upravit dotazy. Také funkce jako GROUP BY jsou v PostgreSQL přísnější: každý sloupec v SELECT musí být buď agregovaný, nebo uvedený v GROUP BY. MySQL toto v některých režimech povoluje, takže po migraci můžete dostat chyby.
Nakonec si naplánujte přechod s dostatečnou rezervou. Migrace se nikdy neobejde bez ladění a oprav. Mějte připravený rollback plán, pokud by se vyskytly kritické problémy. S důkladnou přípravou a testováním se vyhnete nejčastějším nástrahám a přechod na PostgreSQL se stane hladkým procesem.