Ruční přepisování versus vestavěné nástroje: co zrychlí refaktoring
Většina týmů dělá retrospektivu pravidelně, ale málokdy z ní něco vznikne. Schůzka se zvrhne v obecné stesky, několik lidí mlčí a za dvě hodiny se rozejdete s pocitem, že se nic nezměnilo. Příčina nebývá v lidech, ale ve formátu. Strukturovaná zpětná vazba je způsob, jak z rozhovoru vytáhnout konkrétní informace, které se dají řešit. Nejde o žádnou metodu z konference, ale o obyčejnou disciplínu v tom, jak lidé mluví.
Nástroje vybírejte podle toho, co potřebujete zachyt
Základem obrany je používat parametrizované dotazy nebo prepared statements. Databázový ovladač pošle strukturu dotazu zvlášť a hodnoty zvlášť, takže vstup nikdy nezmění syntaxi příkazu. V praxi to znamená, že místo skládání řetězce s proměnnou uvnitř dotazu předáte hodnotu jako vázaný parametr. Tento přístup podporuje většina moderních knihoven a frameworků. Pokud používáte ORM, ověřte, že i přímé dotazy v něm jsou parametrizované, protože některé metody umožňují vložit surový řetězec.
Dále si zvykni na větev. Výchozí větev je tvoje hlavní linie, ale veškerou novou práci dělej v samostatné větvi. Pojmenuj ji krátce a výstižně podle toho, co řeší. Jakmile je funkce hotová a otestovaná, sloučíš ji zpět. Tím se vyhneš situaci, kdy rozpracovaná změna blokuje vydání opravy. Sloučení dělej po malých krocích, ne jednou za měsíc s tisíci změnami. Malé sloučení se snadno kontroluje a snadno se v něm hledá chyba.
Začni tím, že si nainstaluješ nástroj pro distribuované verzování a nastavíš si jméno a e-mail. Tyto údaje se zapisují ke každé změně, takže je potřeba je mít správně hned na začátku. Potom si v kořeni projektu spusť inicializaci repozitáře. Vznikne skrytá složka, která si drží veškerou historii. Do ní nikdy nezasahuj ručně. Hned po inicializaci vytvoř soubor, který řekne, co se má ignorovat: závislosti, build výstupy, lokální konfigurace s hesly a všechny soubory, které si generuje editor nebo operační systém. Bez tohoto kroku si do historie zaneseš tisíce souborů, které tam nepatří, a repozitář se stane nepoužitelným.
Kam ukládat token a jak ho chránit Token v prohlížeči nepatří do localStorage. JavaScript k němu má přístup, takže jakýkoli XSS útok ho přečte. Bezpečnější je HttpOnly cookie s příznakem Secure a SameSite=Strict. Tím se token nedostane do JavaScriptu. Pozor na CSRF: cookie se posílá automaticky, takže přidejte CSRF token nebo použijte dvojici přístupový a obnovovací token s krátkou platností.
Verzování není něco, co si přidáš na konec projektu, až bude hotový. Je to nástroj, který použiješ dřív, než napíšeš první řádek produkčního kódu. Pro webového vývojáře to znamená jediné: mít uloženou historii změn tak, abys mohl kdykoli zjistit, co se rozbilo, vrátit se o krok zpět a pracovat na nové funkci, aniž bys ohrozil to, co už funguje.
Refaktoring kódu neznamená přepisování celých souborů znovu od začátku. Právě naopak: většinu změn zvládnete za pár sekund, pokud používáte nástroje, které má vaše vývojové prostředí už zabudované. Ruční úpravy textu jsou lákavé, protože je znáte, ale u větších zásahů vedou k chybám, které se hledají mnohem déle než samotná změna. Rozdíl mezi oběma přístupy se projeví hlavně ve chvíli, kdy stejnou úpravu potřebujete na dvaceti místech.
Doba platnosti přístupového tokenu má být krátká, v řádu minut. Obnovovací token uložte na serveru a mějte možnost ho zneplatnit. Stateless JWT nelze odvolat před vypršením, což je častý omyl. Pokud potřebujete okamžité odhlášení, veďte si černou listinu nebo používejte serverovou session. Datová část tokenu není šifrovaná, pouze kódovaná base64. Neukládejte do ní hesla, rodná čísla ani interní identifikátory.
Nakonec si nastav zálohu. Repozitář jen na svém počítači tě neochrání před selháním disku. Používej vzdálený repozitář a push prováděj pravidelně, klidně několikrát denně. Pokud pracuješ v týmu, domluvte se na jednom postupu pro větve a slučování a držte se ho. Nejčastější chyba není technická, ale lidská: nedůslednost. Verzování funguje jen tehdy, když ho používáš pořád, ne jen ve chvílích, kdy si vzpomeneš.
Při ověřování kontrolujte všechny povinné údaje: iss, aud, exp, nbf. Vynechání aud znamená, že token určený pro jinou službu projde. Clock skew nastavte na několik sekund, ne na hodiny. Podepisovací klíč měňte při každém podezření na kompromitaci a podporujte rotaci klíčů přes kid v hlavičce. Testujte chybové stavy: token bez podpisu, token s pozměněným jedním znakem, token po expiraci. Právě tam se chyby projeví nejdřív.
První commit a co do něj nepatří První uložení změn by mělo obsahovat jen zdrojové soubory a konfiguraci projektu. Nezahrnuj do něj nic, co se dá kdykoli vygenerovat znovu, ani žádné přihlašovací údaje. Typická chyba začátečníků je, že pošlou do historie klíč nebo přístupový token a teprve později zjistí, že i po smazání zůstává v předchozích verzích. Pokud se to stane, je nutné historii přepsat, což je nepříjemné a riskantní. Proto si před každým uložením projdi, co přesně odesíláš.