MySQL a PostgreSQL: Jak na migraci bez ztráty dat

SQL injection patří mezi nejčastější a nejnebezpečnější zranitelnosti webových aplikací. Útočník do vstupních polí nebo URL zadá speciálně upravený SQL dotaz, čímž může získat přístup k databázi, odcizit data, nebo je dokonce smazat. Nejhorší je, že se této chybě dá poměrně snadno předejít. Základem je pochopit, jak k útoku dochází, a pak aplikovat správné obranné techniky.<br> <br> <br> <br> Když projekt obsahuje více jazyků, největší problém obvykle není psaní samotné, ale udržení konzistence a pořádku. Různé překlady se snadno rozjedou, pokud nemáte jasně stanovené procesy. Začněte tím, že si nadefinujete jednotný zdroj pravdy – jeden hlavní jazyk, od kterého se odvíjejí všechny ostatní verze. Vyhnete se tak situaci, kdy každý překladatel pracuje s jinou verzí zdrojového textu.<br> <br> <br> <br> <span style="font-weight: bold;">Testovací pyramida bývá</span> nejčastěji vykreslována jako tři patra: široká základna jednotkových testů, uprostřed testy integrační a na vrcholu malý počet testů end-to-end. Tahle představa je užitečná, ale v praxi ji týmy často berou příliš doslova. Mnohem lepší je chápat ji jako poměr rychlosti, spolehlivosti a nákladů na údržbu. Pokud testy v základně začnou zabíhat pomalu nebo se stanou křehkými, pyramida se deformuje a přestává plnit svůj účel.<br> <br> <br> <br> Kde nejčastěji chybujete a jak to opravit Klasickým prohřeškem je stavba SQL dotazů pomocí řetězců, kde spojujete text a proměnné. Například: SELECT * FROM uzivatele WHERE jmeno = '".$_GET['jmeno']."'. Tento kód je extrémně zranitelný. Útočník do jména zadá: ' OR '1'='1 a získá všechny uživatele. Dalším častým problémem je neověřené použití vstupů v příkazech jako ORDER BY nebo LIMIT. I tyto části dotazu lze zneužít, pokud se data nevalidují jako číselné hodnoty nebo bezpečné identifikátory sloupců.<br> <br> <br> <br> Další praktický tip: používejte nástroj pro správu překladů s podporou kontroly kontextu. Místo prostého překladu slovíček si k jednotlivým řetězcům přidávejte poznámky, kde je uvedeno, k čemu se text vztahuje. Například u řetězce „Otevřít" uveďte, že jde o tlačítko pro otevření souboru, ne o otevření odkazu. Mnoho chyb vzniká právě kvůli nejednoznačnosti. Pokud pracujete v týmu, domluvte si, že kdokoli přidá nový klíč, musí vždy dodat i komentář – to zabere pár vteřin a ušetří hodiny dohadování.<br> <br> <br> <br> Na závěr si nastavte metriky, podle kterých budete pyramidu vyhodnocovat. Sledujte průměrnou dobu běhu jednotlivých vrstev, počet testů, které selhávají bez zjevné příčiny, a čas, který vývojáři stráví opravou testů. Pokud se tyto hodnoty zhoršují, vraťte se k revizi. Pamatujte, že pyramida není cíl, ale nástroj — jejím smyslem je dát vám rychlou a spolehlivou zpětnou vazbu při každé změně kódu. Když ji postavíte správně, ušetříte čas a předejdete chybám, které by se jinak dostaly až do produkce.<br> <br> <br> <br> <span style="font-weight: bold;">Druhým krokem je zavedení</span> konvencí pro pojmenování souborů a klíčů. Pokud máte překlady v JSON nebo YAML souborech, dodržujte stejnou strukturu klíčů napříč jazyky. Například klíč pro tlačítko „odeslat" by měl být vždy button.submit a nikdy ne tlacitko.odeslat. Tím se vyhnete nejednoznačnosti a usnadníte si hledání chyb. Zároveň si nastavte pravidlo, že žádný řetězec nesmí být tvrdě zakódovaný v kódu – všechny texty musí být v překladových souborech.<br> <br> <br> <br> <strong>Když se řekne „podpora pro</strong> datab", většina lidí si představí něco, co se týká pouze databázových administrátorů. Opak je pravdou – jde o systémové nastavení, které ovlivňuje výkon i stabilitu běžných aplikací. Ať už provozujete e-shop, firemní portál nebo interní nástroj, bez správného nastavení podpory pro datab můžete narazit na zpomalení, výpadky nebo dokonce ztrátu dat. Tento článek se zaměřuje na to, co konkrétně zohlednit při návrhu a údržbě databázové vrstvy, a to bez ohledu na konkrétní technologii.<br> <br> <br> <br> Kromě prevence je nutné mít detekci útoku. Ukládejte logy, které zaznamenávají neobvyklé SQL dotazy – například mnoho uvozovek, slova jako UNION, SELECT, OR. Tyto logy pravidelně procházejte a upozorňujte na podezřelou aktivitu. Pomoci může i web application firewall, který filtruje příchozí požadavky, ale nikdy se na něj nespoléhejte jako na jedinou obranu. Pravidelně testujte svou aplikaci na zranitelnosti, a to jak automatickými skenery, tak manuálním testováním.<br> <br> <br> <br> Důležité je také myslet na délku textů. České věty jsou často delší než anglické, takže při návrhu rozhraní počítejte s rezervou. Testujte překlady přímo v aplikaci, nejen v souborech. Různé délky textů totiž rozbijí layout – tlačítka se přetékají, popisky se oříznou. Mějte proto proces, kdy po nasazení nové jazykové verze projdete klíčové obrazovky a zkontrolujete jejich zobrazení. Ideálně to dělejte automatizovaně, ale ruční kontrola jednou za sprint je nutná minimálně.