Vstupy a tajemství
Nedůvěřuj tomu, co přijde zvenčí, a nedávej tajné věci tam, kde je vidět.
12 minlekce 98/107
Po lekci umíš
- Víš, proč se vstupy od uživatele kontrolují na serveru
- Znáš nejčastější způsoby zneužití vstupu
- Umíš zkontrolovat, že v projektu nejsou tajemství na špatném místě
Dvě zbylé chyby ze čtyř. Obě jsou mechanické a obě se dají zkontrolovat promptem.
Vstupy
Vstup je cokoliv, co do aplikace přijde zvenčí: formulář, adresa, nahraný soubor, odpověď cizí služby.
Všechno z toho může být upravené.
Tři způsoby zneužití
Podstrčený kód do stránky
Uživatel zadá do pole text, který se pak na stránce vykoná jako kód. Postihne to jiné uživatele, kteří tu stránku otevřou.
Podstrčený dotaz do databáze
Vstup se vloží do databázového dotazu tak, že změní jeho význam. Když používáš běžnou vrstvu pro práci s databází, jsi proti tomu z velké části chráněný – ale ne, když se dotazy skládají ručně z textu.
Nesmyslná data
Záporný počet, cena nula, datum v roce 1900, e-mail bez zavináče. Nemusí to být útok – stačí překlep. Ale rozbije to výpočty.
Zkontroluj vstupy
Před spuštěním čehokoliv, kam mohou psát uživatelé.
Projdi místa, kde aplikace přijímá vstup od uživatele,
a zkontroluj je.
1. Kde se vstup nekontroluje na serveru – typ, povinnost, rozsah, délka?
2. Kde se text od uživatele zobrazuje jinému uživateli
a mohl by se vykonat jako kód?
3. Skládají se někde databázové dotazy ručně z textu?
4. Kde se přijímá soubor – kontroluje se typ a velikost?
5. Kde by nesmyslná hodnota (záporné číslo, nula, obrovské číslo)
rozbila výpočet?
U každého nálezu napiš, co by šlo způsobit. Zatím nic neopravuj.Nahrávání souborů
Zvláštní kapitola, protože se u ní chybuje často.
Kontroluj typ i velikost
A to na serveru, ne podle přípony v názvu.
Neukládej pod jménem, které poslal uživatel
Název souboru může obsahovat cestu a dostat soubor někam, kam nemá.
Neukládej to tam, odkud se to dá spustit
Nahrané soubory patří do úložiště, ne mezi kód aplikace.
Nastav strop
Bez limitu velikosti a počtu ti někdo zaplní úložiště.
Tajemství
Druhá polovina lekce. Pravidla znáš z modulu o API, tady je kontrola celého projektu.
Najdi tajemství v projektu
Před zveřejněním repozitáře a před nasazením.
Prohledej tenhle projekt na tajemství, která tam nemají být.
1. Klíče, tokeny, hesla nebo přístupové řetězce přímo v kódu.
2. Totéž v historii Gitu, ne jen v aktuálním stavu.
3. Tajné hodnoty v proměnných s veřejnou předponou,
které se dostanou do prohlížeče.
4. Přístupové údaje v konfiguračních souborech, které jsou v repozitáři.
5. Tajemství, která se můžou dostat do logu nebo do chybové hlášky.
6. Chybí něco v .gitignore?
U každého nálezu napiš, jak je to vážné a co udělat jako první.Závislosti
Poslední místo, kde vzniká riziko: balíčky, které projekt používá.
Přidávej vědomě
Každý balíček je cizí kód, který běží s tvými právy.
Kontroluj známé chyby
Nástroje umí projít závislosti a nahlásit ty s nahlášenou zranitelností.
Aktualizuj rozumně
Ne každý den, ale ani jednou za dva roky.
Zkontroluj závislosti
Jednou za čas a před spuštěním naostro.
Zkontroluj závislosti projektu:
1. Jsou mezi nimi balíčky se známou bezpečnostní chybou?
2. Jsou tam balíčky, které se už nepoužívají?
3. Jsou tam balíčky, které dlouho nikdo neaktualizoval?
4. Je něco, co bychom zvládli bez knihovny?
U aktualizací mi řekni, které jsou bezpečné a které můžou
něco rozbít. Neaktualizuj nic sám.Spusť ve svém projektu všechny tři kontrolní prompty z téhle lekce.
Nálezy si seřaď podle vážnosti a oprav ten nejvážnější. Zbytek si zapiš.
Tuhle trojici promptů si přidej do dovednosti „kontrola před nasazením“.
Co si odnést
- Vstup zvenčí může být upravený. Kontroly patří na server.
- Nejčastější škoda nevzniká z útoku, ale z nesmyslné hodnoty.
- Nahrané soubory: kontroluj typ i velikost, neukládej pod cizím jménem, dej strop.
- Tajemství hledej i v historii Gitu. Nalezený klíč nejdřív zneplatni.
- Závislosti jsou cizí kód s tvými právy. Aktualizuj po částech.
Máš to za sebou?
Označ lekci jako hotovou, ať víš, kde jsi skončil. Nic se tím neuzamkne.
Další lekceOsobní údaje a odpovědnostObsah aktualizován: 21. srpna 2026