5 zásad, jak zabránit SQL injection ve webových aplikacích
Základem je oddělit generování dat od samotného testu. Vytvořte si pomocnou funkci nebo třídu, která data vytváří, a tu pak v testech pouze volejte. Když se změní formát e-mailu nebo rozsah čísel, upravíte jedno místo. Bez tohoto oddělení skončíte s kopírováním logiky do desítek testů a každá změna bude znamenat hodiny práce. Do generátoru zabalte i seed, rekonstrukce bytu tedy počáteční hodnotu pro pseudonáhodný generátor. Bez seedu nelze běh zopakovat a ladění padajícího testu se změní v hledání jehly v kupce sena.
Escapování a validace nestačí jako hlavní obrana Ruční escapování uvozovek a jiných znaků je křehké. Snadno se zapomene na jeden vstup, na jinou znakovou sadu nebo na číselný parametr, kde se uvozovky vůbec nepoužívají. Podobně whitelist povolených znaků pomůže, ale nesmí být jediná vrstva. Validace je užitečná pro kontrolu formátu – e-mail, datum, číslo – ale bezpečnost dotazu musí stát na parametrizaci. Častá chyba je také spoléhat na to, že útočník neuhodne název tabulky nebo sloupce. Názvy se dají zjistit a skládat je z uživatelského vstupu je vždy riziko.
Častá chyba je snaha o dokonalé pokrytí všech větví. Sto procent pokrytí neznamená kvalitu, často znamená jen velké množství testů, které nikdo nečte. Další chybou je ignorování testovacích dat. Pokud integrační testy vytvářejí data ad hoc, dříve nebo později dojde ke kolizím. Pomáhá jednotný způsob přípravy dat a jejich úklidu. Také se vyhněte sdílení stavu mezi testy. Každý test má začínat v čistém prostředí, i když to znamená pomalejší běh. Rychlost se dá řešit paralelizací, ale špatná izolace se řeší jen přepisem.
Další vrstvou je omezení práv databázového účtu. Aplikace nemá používat účet s právy správce. Stačí jí přístup jen k potřebným tabulkám a operacím. Když útočník i přes chybu získá možnost spustit dotaz, nemá pak jak číst systémové tabulky nebo vypnout server. Pomáhá i vypnutí podrobných chybových hlášení směrem k uživateli; chyby patří do logu, ne na obrazovku. Pravidelné testování vstupů a kontrola kódu odhalí místa, kde se dotazy skládají ručně. Bezpečnost není jednorázový úkol, ale opakovaná kontrola toho, co aplikace skutečně posílá do databáze.
Nakonec platí, že licence je součástí architektury, ne odkládaná administrativa. Čím dříve ji vyřešíte, tím menší je riziko, že budete muset přepisovat hotový produkt nebo zveřejnit něco, co zveřejnit nechcete.
Extrakce a přesun jako denní chl�
Další častá chyba je přílišná náhodnost. Test, který při každém běhu vytvoří jiná data, je sice dynamický, ale také nereprodukovatelný. Když spadne v CI, nemáte jak zjistit, co přesně vstoupilo. Proto je dobré logovat vygenerované hodnoty nebo používat seed, který lze z příkazu předat. Tím získáte výhody obojího: rozmanitost i dohledatelnost.
Základní dělení je na permisivní a copyleftové licence. Permisivní licence, mezi které patří MIT, BSD nebo Apache, vám umožňují kód použít i v uzavřeném produktu. Obvykle stačí zachovat autorská práva a text licence. Copyleftové licence, jako GPL nebo AGPL, In case you loved this short article and you want to receive much more information with regards to zdroj i implore you to visit the web-page. naopak vyžadují, abyste odvozené dílo šířili za stejných podmínek. To znamená, že pokud GPL kód propojíte s vlastním kódem a distribuujete binárku, musíte zpřístupnit i zdrojový kód svého díla.
Dynamická data při testování znamenají, že vstupní hodnoty nejsou pevně dané, ale generují se při každém běhu. Může jít o náhodná čísla, řetězce, datumy, e-maily nebo celé objekty. Výhoda je zřejmá: odhalíte chyby, které by se statickými hodnotami nikdy neprojevily. Zároveň ale přichází řada problémů, které je potřeba řešit dřív, než je testovací sada nepoužitelná.
Pozor na dynamické části dotazu, které nelze parametrizovat: řazení podle sloupce, názvy tabulek, operátory porovnání. Tady se musí použít pevný seznam povolených hodnot a vybrat z něj podle přesné shody. Nikdy nevkládejte do dotazu přímo to, co přišlo z formuláře nebo z parametru v adrese. Platí to i pro skrytá pole a hodnoty, které si aplikace sama posílá – i ty může útočník přepsat.
Jak zjistit, co vlastně používáte V praxi se nevyplatí spoléhat na to, že vývojář uvedl licenci správně. Použijte nástroj pro analýzu závislostí, který vypíše licence všech balíčků ve stromu závislostí. U každé licence si ověřte dvě věci: zda vyžaduje zveřejnění zdrojového kódu a zda obsahuje patentovou doložku. Patentová doložka v Apache 2.0 chrání před žalobou za porušení patentů, kdežto MIT nic takového neřeší. U knihoven, které se dynamicky linkují, bývá situace složitější než u samostatně spouštěných nástrojů.