SQL injection: proč ho vývojáři stále podceňují a jak se mu bránit
Na závěr si pohlídejte, jak tokeny přijímáte. Vždy ověřujte, že přicházejí jen z očekávaných zdrojů, a omezte CORS na konkrétní domény, kterým důvěřujete. Kontrolujte také, že algoritmus v hlavičce tokenu odpovídá tomu, který jste nastavili na serveru. Tím zabráníte útokům typu alg confusion. JWT není všelék, ale když respektujete jeho principy – krátkou platnost, silný podpis a bezpečné uložení – získáte solidní základ pro ochranu vašeho API bez zbytečné složitosti.
Důležité je myslet na to, že Grid nepracuje s tokem dokumentu tak jako Flexbox. U Gridu určujete, kde prvek skončí, pomocí grid-column a grid-row. U Flexboxu naopak pořadí prvků v HTML určuje jejich vzájemnou polohu. Pokud tedy chcete, aby se pořadí prvků měnilo podle velikosti obrazovky, Flexbox to zvládne sám, ale u Gridu musíte přidat media query a předefinovat pozice. Častá chyba je snažit se Gridem vytvořit jednoduchý horizontální pruh s ikonami – to je zbytečně složité. Flexbox to udělá v řádcích.
Při psaní kódu se zaměřte na vrstvenou obranu. I když používáte parametrizované dotazy, omezte práva databázového uživatele – aplikace by měla mít přístup pouze k nutným tabulkám a operacím. Nikdy nepřipojujte k databázi jako root nebo administrátor. Dalším krokem je validace vstupů na úrovni aplikace, ale ne jako náhrada parametrizace, jen jako doplněk. Například e-mailová adresa by měla projít filtrem, ale stejně by měla být předána přes prepared statement. Pozor také na chybové hlášky – nikdy nevracejte detailní informace o SQL dotazu, protože to útočníkovi usnadní práci. Místo toho použijte generickou chybovou stránku a detaily zapisujte do logu.
Jak začít s testováním a na co si dát pozor Nejprve si ujasněte, co přesně chcete testovat. Zaměřte se na tři hlavní oblasti: funkčnost (například přihlášení nebo nákupní košík), výkon (rychlost načítání, spotřeba baterie) a uživatelskou přívětivost (ovládání jednou rukou, čitelnost). Pro manuální testy si vytvořte seznam kritických scénářů – od registrace až po odhlášení. Testujte na reálných zařízeních i emulátorech, protože každý přístup odhalí jiné problémy. Emulátory jsou rychlé, ale neodhalí například problémy se senzory nebo GPS. Při automatizaci začínejte s malým počtem testů, které pokrývají hlavní toky. Postupně přidávejte okrajové případy, ale nepřehánějte to – každý automatizovaný test vyžaduje údržbu, která se prodraží.
Pozor také na to, co do payloadu dáváte. Nikdy tam neukládejte citlivé údaje jako hesla, e-maily nebo osobní informace, protože payload je jen base64 zakódovaný, tedy snadno čitelný. Místo toho do tokenu vložte identifikátory: ID uživatele, ID role nebo oprávnění. Server si pak podrobnosti vždy dohledá. Pokud potřebujete token okamžitě zneplatnit, narazíte na limity stateless přístupu. Jediná spolehlivá metoda je udržovat si na serveru seznam zneplatněných tokenů. To sice zavádí stav, ale pro případy, jako je odhlášení nebo změna hesla, je to nezbytné.
Při práci s dědičností oceníte pull up a push down. Pull up přesune metodu nebo pole do nadtřídy, push down naopak do podtříd. IDE automaticky opraví definice a volání. Tyto operace jsou bezpečné, ale vyžadují, abyste měli jasno v hierarchii tříd – jinak můžete omylem změnit chování programu. Obdobně funguje i funkce Extract Interface, která z existující třídy vytvoří rozhraní a přiřadí ji třídě. To se hodí při testování a zavádění závislostí, ale dejte pozor na to, že se rozhraní musí promítnout do všech na místech, kde se třída používá.
Nezapomínejte ani na přístupnost. Správné použití Gridu a Flexboxu neovlivňuje HTML strukturu, takže můžete mít logické pořadí nadpisů a odstavců a vizuálně je přeskupit. To je velká výhoda. Ale pozor – pokud používáte Grid k rozmístění prvků, které na sebe navazují v čtení, držte se stejného pořadí v HTML i vizuálně. Prohlížeče někdy při změně velikosti okna přepočítávají rozvržení pomaleji, takže pokud kombinujete hodně vnořených Gridů a Flexboxů, může to zamrznout. Držte se jednoduchosti: maximálně dvě úrovně vnoření.
Při testování nezapomínejte na zpětnou vazbu od uživatelů. Testujte, jak aplikace funguje s rozšířeným textem, s přepnutým jazykovým nastavením nebo s změněnou velikostí písma. Tyto okrajové případy často odhalí chyby, které byste jinak přehlédli. Až budete mít aplikaci otestovanou, zkuste si projít proces od začátku do konce ještě jednou, tentokrát s čistou hlavou. Často objevíte nelogické kroky nebo zbytečné překážky, které uživatele zpomalují. Testování je iterativní proces – nebojte se vracet k předchozím krokům a vylepšovat je. Výsledkem bude aplikace, která nejen funguje, ale i potěší.