Proč se JWT tokeny v API často stanou slabým místem?
Základem je adresář .github/workflows v kořeni repozitáře. Do něj se ukládají soubory ve formátu YAML. Každý workflow má název, definici spouštěče (on) a jednu nebo více úloh (jobs). Úloha se skládá z kroků (steps), které mohou používat hotové akce, nebo spouštět příkazy v shellu. Pro začátek stačí workflow, který se pustí při pushi do hlavní větve, nainstaluje závislosti, spustí testy a případně sestaví artefakt.
JWT token se skládá ze tří částí oddělených tečkou: hlavičky, datové části a podpisu. Hlavička určuje použitý algoritmus, datová část nese takzvané nároky (claims) a podpis ověřuje, že token nezměnil někdo cizí. Právě podpis je jediná skutečná ochrana. Pokud server podpis neověřuje, nebo ho ověřuje špatně, je celý token jen obyčejný text, který si může kdokoli přepsat. Proto první krok při zabezpečení spočívá v tom, If you have any inquiries regarding where and how to use více rad, you can call us at our website. že na serveru vždy vynutíte ověření podpisu a nikdy nedůosvětlení v obývákuěřujete obsahu tokenu před tím, než ho ověříte.
Prvním krokem k nápravě je přestat skládat dotazy pomocí konkatenace. Místo toho použijte parametrizované dotazy nebo prepared statements. Hodnoty se předávají jako parametry a databázový engine je nikdy nevykoná jako SQL kód. To platí pro všechny typy databází i jazyky. Pokud knihovna podporuje vázané parametry, je to vždy bezpečnější cesta než ruční escapování.
Když stejný objekt potřebujete ve více testech, nekopírujte ho. Definujte funkci s dekorátorem @pytest.fixture a její jméno uveďte jako parametr testu. pytest ji zavolá před testem a výsledek předá. Pro přípravu a úklid použijte yield místo return: kód před yield proběhne na začátku, kód po něm na konci, i když test selže. Tím se zbavíte ručního zavírání souborů a připojení, která občas zůstanou otevřená. Pozor na fixtury s širokým rozsahem – pokud mění globální stav, ovlivní i testy, které ji nepoužívají.
Základní kostra dokumentu se skládá z hlavičky a těla. V hlavičce je , titulek stránky a odkaz na externí styl. V těle je samotný obsah. Externí soubor s příponou .css je lepší než styl psaný přímo do značek, protože se dá použít na více stránkách a snadno se mění. Na začátek souboru patří reset nebo alespoň box-sizing: border-box, aby se šířky a výšky počítaly včetně paddingu a okrajů. Bez toho se prvky rozjíždějí.
Co hlídat u platnosti a ukládání tokenů Každý token by měl mít krátkou životnost, typicky v řádu minut, a nést nárok „exp" s časem vypršení. Server musí tento čas kontrolovat, ne jen spoléhat na to, že token mezitím vyprší sám. Kromě toho se vyplatí ověřovat „iss" (kdo token vydal) a „aud" (pro koho je určen), aby token z jedné služby nešel použít v jiné. Ukládání tokenu na klientovi je další slabé místo: osvětlení v obýváku prohlížeči je bezpečnější uložit token do cookie s příznaky HttpOnly, Secure a SameSite, protože JavaScript k němu pak nemá přístup. Ukládání do místního úložiště je pohodlné, ale zranitelné vůči útokům typu XSS.
Ověřujte také oprávnění databázového účtu. Aplikace nemá používat účet s právy správce. Pokud útočník pronikne do dotazu, má mít možnost číst a měnit jen to, co nezbytně potřebuje. Oddělené účty pro čtení a zápis snižují dopad případného průniku. Zálohy a logy pak pomohou zjistit, co se stalo.
SQL injection vzniká ve chvíli, kdy aplikace slepí dotaz z řetězců, do kterých se dostane vstup od uživatele. Útočník pak místo očekávané hodnoty pošle fragment SQL a databáze ho vykoná jako součást příkazu. Nejde o okrajovou chybu, ale o důsledek špatné konstrukce dotazu. Pokud se vstup neověřuje a dotaz se skládá ručně, stačí jediné pole formuláře nebo parametr v adrese.
Posledním krokem je pravidelná kontrola. Projděte všechny dotazy v kódu, vyhledejte řetězení a nahraďte je parametry. Zavedením testů se vstupy obsahujícími uvozovky, komentáře a operátory odhalíte chyby dřív než útočník. Bezpečnost není jednorázový úkol, ale průběžná disciplina při psaní každého dotazu.
Častou chybou je předpoklad, že stačí přidat konfigurační soubor a lidé si ho automaticky vezmou. Pokud nástroj vyžaduje explicitní zapnutí, musí být v dokumentaci projektu uvedeno, jak zařídit malou kuchyniým příkazem se spouští. Bez toho se stane, že polovina týmu formátuje při ukládání a druhá polovina až před commitem, což vytváří zbytečné konflikty. Řešením je zavést kontrolu v rámci CI, která ověří, že výstup odpovídá pravidlům. Když kontrola selže, je jasné, že je problém v kódu, ne v prostředí.
Důležité je také nastavit, co se stane, když někdo pravidla poruší. Automatická oprava při ukládání je pohodlná, ale nesmí být jediná obrana. V CI se vyplatí spouštět kontrolu formátu bez zápisu, aby se odhalily i případy, kdy někdo formátovač vypne. Zároveň je dobré mít v repozitáři dokument, který stručně popíše, které nástroje se používají a jaké příkazy se mají spouštět. Nemusí to být dlouhý text, stačí pár řádků s jasnými instrukcemi.