SQL injection vs. bezpečný kód: kde vzniká chyba?

Z Mazovia


Než začnete psát kód, zkuste si API osahat v prohlížeči nebo v nástroji pro testování API, který je součástí mnoha vývojových prostředí. Zadejte adresu z dokumentace, přidejte potřebné hlavičky a sledujte odpověď. Většinou dostanete JSON, tedy strukturovaný text, kterému rozumí každý programovací jazyk. Právě tady udělají začátečníci první chybu: snaží se JSON ručně upravovat nebo parsovat pomocí regulárních výrazů. Místo toho použijte nativní knihovnu pro práci s JSON, kterou má váš jazyk vestavěnou. Je rychlejší, bezpečnější a nezhroutí se při nečekaném formátu čísla.

Commit message je jediný trvalý záznam o tom, proč a jak se kód změnil. Když ji napíšete ledabyle, za půl roku budete u vlastního kódu tápat, co jste tím mysleli. A kolega, který váš commit čte poprvé, si bude muset domýšlet souvislosti. Přitom stačí dodržet pár pravidel, která nezaberou víc než minutu navíc a ušetří hodiny dohledávání.

Nakonec si uvědomte, že commit message je komunikace s budoucími čtenáři — včetně vašeho budoucího já. Než commit odešlete, přečtěte si ho nahlas. Když zní jako věta, kterou byste sami pochopili bez znalosti kódu, je pravděpodobně dobrá. Když je vágní, doplňte podrobnosti. Tato minuta navíc se vám mnohonásobně vrátí, až budete příště hledat, kde se stala chyba, nebo proč byla daná funkce napsaná zrovna takhle.

Dobrá commit message by měla odpovídat nábytek na míru otázku „proč", ne „co". Pokud přidáváte nový parametr do funkce, vysvětlete, že bez něj nelze zpracovat požadavky s časovým pásmem uživatele. Pokud měníte logiku řazení, uveďte, že stávající řešení selhávalo u položek se stejným datem. Typickou chybou je opisovat změny typu „upravena funkce getData" nebo „fix bugs". Taková zpráva je k ničemu, protože nenese žádnou informaci o důvodu ani o souvislostech. Stejně tak se vyhněte emotikonům, vtipům a zkratkám, které jsou srozumitelné jen vám.

Optimalizace se netýká jen samotného příkazu, ale i struktury dat. Normalizace je dobrá pro konzistenci, ale příliš mnoho spojení (JOIN) může být pomalé. V takovém případě zvažte denormalizaci – přidání redundantních sloupců, které odstraní drahé spojení. Mějte ale na paměti, že to zvyšuje složitost při zápisu. Kompromisem je použití materiálizovaných pohledů nebo předpočítaných souhrnů pro často používané agregace. Pravidelně také aktualizujte statistiky, aby optimalizátor měl správné informace o distribuci dat.

Základním pravidlem je oddělit shrnutí od podrobností. První řádek by měl být krátký, do padesáti znaků, a měl by odpovídat na otázku, co commit dělá. Třeba „Oprava výpočtu DPH u faktur s měnou EUR". Tento řádek se zobrazuje v přehledech, logu i v e-mailech. Zbývající řádky oddělte prázdným řádkem a tam vysvětlete, proč jste změnu provedli, jaké měla důsledky a jaké alternativy jste zvažovali. Neopisujte, co je vidět v diffu — to už tam je. Pište to, co z kódu nevyčtete.

Na závěr jedno doporučení: nezačínejte s největším a nejznámějším API hned napoprvé. Vyberte si něco malého, ideálně bez nutnosti přihlášení, a zkuste si na něm vytvořit jednoduchého klienta, který data stáhne a zobrazí. Jakmile projdete tímto procesem od začátku do konce, budete mít představu, jak API fungují obecně. Pak už pro vás bude práce s tokeny, hlavičkami a limitami jen logickým rozšířením toho, co už umíte. A pokud se něco pokazí, nezoufejte. Chybové hlášky nejsou nepřítel, ale jediná zpětná vazba, kterou od serveru dostanete. Čtěte je pozorně a ony vás provedou.

Optimalizace SQL dotazů není jen o rychlejší odezvě aplikace. Pomalé dotazy zatěžují databázový server, prodlužují transakce a v konečném důsledku zvyšují náklady na infrastrukturu. Než začnete ladit konkrétní příkazy, zaměřte se na to, co se děje pod kapotou. Prvním krokem je vždy analýza pomalých dotazů. Většina databázových systémů nabízí log pomalých dotazů nebo dynamické pohledy, které ukáží, které příkazy trvají nejdéle. Neoptimalizujte naslepo – nejprve identifikujte skutečný problém.

Jakmile máte funkční základ, začněte ošetřovat chyby. Nikdy nepředpokládejte, že odpověď přijde vždy. Server může být přetížený, síť může spadnout nebo může dojít k překročení limitu požadavků. Vytvořte si proto jednoduchý mechanismus, který po neúspěšném požadavku počká několik sekund a zkusí to znovu. Ale pozor: neopakujte požadavky bez omezení, jinak získáte dočasný zákaz. Místo toho si zjistěte, jestli API nabízí hlavičku s informací, kdy si můžete říct o další data, a podle toho se zařiďte.

Při tvorbě workflowů pozor na oprávnění. GitHub Actions běží s implicitními právy, která mohou být širší, než potřebujete. Pokud pipeline jen testuje, nepotřebuje právo na zápis do repozitáře. Nastavte si proto minimální oprávnění v sekci permissions – snížíte tím riziko, že útočník přes kompromitovanou akci získá přístup k vašemu kódu. Stejně tak si dejte pozor na použití secrets. Nikdy je neukládejte přímo do YAML souboru a vždy je odkazujte přes GitHub Secrets. A pokud používáte self-hosted runnery, nikdy na nich nespouštějte workflow z nepřátelských forků bez izolace – to je častý bezpečnostní průšvih.

In the event you loved this article and you want to receive much more information regarding Crabcodex.com i implore you to visit our own website.