Co se stane, když si postavíte pyramidu pro projekt

Z Mazovia
Wersja z dnia 03:13, 12 paź 2026 autorstwa Freeman79S (dyskusja | edycje) (Utworzono nową stronę "<br>Pozor na případy, kdy parametrizovat nelze. Názvy tabulek, sloupců, klauzule ORDER BY nebo ASC/DESC se často skládají z uživatelského vstupu, ale placeholdery pro ně nefungují. Zde je nutné použít whitelist povolených hodnot. Pokud uživatel vybírá řazení, nabídněte mu konkrétní seznam a mapujte vstup na pevné řetězce. Nikdy neověřujte pouze to, že vstup neobsahuje apostrof nebo středník, protože filtry založené na černých li…")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)


Pozor na případy, kdy parametrizovat nelze. Názvy tabulek, sloupců, klauzule ORDER BY nebo ASC/DESC se často skládají z uživatelského vstupu, ale placeholdery pro ně nefungují. Zde je nutné použít whitelist povolených hodnot. Pokud uživatel vybírá řazení, nabídněte mu konkrétní seznam a mapujte vstup na pevné řetězce. Nikdy neověřujte pouze to, že vstup neobsahuje apostrof nebo středník, protože filtry založené na černých listinách se dají obejít kódováním, komentáři nebo jinou syntaxí.

Shrnutí: odhad nebude přesný, dokud neoddělíte implementaci, revizi a úpravy. Počítejte s tím, že revize není zdarma a že úpravy nejsou jen formalita. Sledujte skutečná data a upravujte odhady podle nich. Bez toho zůstane plánování jen hádání.

Nejčastější chyba je spojování řetězců: "SELECT * FROM uzivatele WHERE jmeno = '" + vstup + "'". Stačí zadat hodnotu, která obsahuje apostrof a další SQL příkaz, a podmínka se rozpadne. Podobně nebezpečné je vkládání čísel bez ověření, protože útočník nemusí použít uvozovky a stačí mu mezera nebo komentář. Ochrana nespočívá v tom, že zakážete apostrof, ale v tom, že vstup nikdy nebude součástí textu dotazu.

SQL injection nevzniká v databázi, ale v místě, kde se řetězec dotazu skládá z uživatelského vstupu. Pokud se hodnota z formuláře, URL parametru nebo hlavičky dostane do textu SQL přes konkatenaci, útočník může změnit význam celého dotazu. Databáze pak vykoná to, co jí předložíte, a ne to, co jste zamýšleli. Rozhodující tedy není použitý databázový engine, ale způsob, jakým se dotaz sestavuje v aplikaci.

Aktualizace je jediná část, kterou lidé podceňují nejvíc. Pyramida nemá být výstavní artefakt, ale pracovní nástroj. Stačí jednou týdně projít jednotlivá patra a zeptat se: co je hotové, co se posunulo a co už neplatí. Pokud se změní výstup, změňte i jeho definici. Pokud se změní odpovědnost, přepište vlastníka. Nenechávejte v pyramidě mrtvé položky jen proto, že je škoda je smazat. Právě ty vytvářejí dojem, že nástroj nefunguje.

Zavedení prepared statements je nutné doplnit minimálními právy databázového uživatele. Aplikace nemá mít právo mazat tabulky, měnit schéma ani číst tabulky, které nepotřebuje. Když i přes veškerou snahu dojde k chybě, omezená práva zmenší dopad. Zároveň je vhodné chybové stavy logovat a nikdy nezobrazovat koncový uživatel SQL dotaz ani chybovou zprávu databáze. Útočník tak nezíská zpětnou vazbu, podle které by ladil další pokusy.

Parametrizace a prepared statements v praxi Řešením jsou parametrizované dotazy, kde se hodnoty předávají odděleně od SQL příkazu. Většina knihoven pro práci s databází to podporuje přes placeholdery, například otazník nebo pojmenovaný parametr. Správný postup je napsat dotaz s placeholdery a hodnoty předat jako argumenty. Databázový ovladač je pošle zvlášť a engine je nikdy nevyhodnotí jako SQL kód. Tím zmizí i problém s apostrofy, uvozovkami a komentáři.

Poslední návyk je měřit místo hádat. Pusť pět lidí na prototyp a nech je mluvit nahlas, zatímco mlčíš. Sleduj, kde se zaseknou, a neobhajuj design. Ptej se „co jsi čekal, že se stane", ne „líbí se ti to". Potom oprav jednu věc a zopakuj. Design není dekorace na konci, ale řada rozhodnutí během psaní kódu.

Destructuring je jednou z funkcí, které se v ukázkách tváří neškodně, ale v reálném kódu dokážou nadělat dost škody. Základní zápis je jednoduchý: z objektu nebo pole vytáhnete hodnoty do proměnných. Jenže právě tady začíná past. Když destrukturujete vlastnost, Here's more info in regards to více čtěte zde stop by the web site. která v objektu neexistuje, dostanete undefined. Pokud s ní dál počítáte jako s číslem nebo řetězcem, aplikace spadne až o několik řádků dál a ladění zabere zbytečně dlouho. Vždy počítejte s výchozí hodnotou: const port = 3000 = config. Výchozí hodnota se použije pouze tehdy, když je vlastnost undefined, ne když je null.

Jak pyramidu poskládat, aby vydržela Začněte zdola. Sepište všechny výstupy, které musí být hotové, aby projekt mohl skončit. Potom je seskupte do menších celků podle toho, co spolu souvisí. Tím vzniknou jednotlivá patra. Nemá smysl tlačit do jednoho patra věci, které se dají udělat nezávisle na sobě. Naopak věci, rady pro rekonstrukci které na sebe čekají, patří do stejné linie. U každého patra si napište jednu větu: „Tohle patro je hotové, když…". Pokud větu nedokážete dokončit bez slov „asi" nebo „snad", nemáte hotovou definici a pyramida bude klouzat.

Kontrola by měla být součástí vývoje, ne jednorázová akce. Projděte všechny dotazy v kódu a ověřte, zda používají parametry. Napište test, který pošle do formuláře apostrof, uvozovku a komentář a ověří, že aplikace vrátí očekávaný úložné prostory v malém bytěýsledek místo chyby. Teprve když jsou všechny vstupy oddělené od SQL, je ochrana proti SQL injection skutečně hotová.