Bezpečné nahrávanie súborov: od formulára po úložisko
Prípona PDF a úspešný upload nestačia. Návrh karantény, kontroly obsahu, privátnych odkazov a oprávnení pri prílohách vo firemnom portáli.

Súbor začína ako nedôveryhodný vstup
V ilustračnom zákazníckom portáli používateľ prikladá PDF k objednávke. Prehliadač odošle názov faktura.pdf a MIME application/pdf. Obe hodnoty môže odosielateľ zmeniť. Ak server uloží prílohu do verejného adresára a hneď ju ponúkne ďalším používateľom, sprístupní obsah ešte pred jeho kontrolou. Nahratie, prijatie a povolenie na stiahnutie preto potrebujú samostatné stavy.
Začnite povolenými formátmi podľa reálnej potreby procesu. Ak systém potrebuje PDF a JPEG, nemusí prijímať HTML, SVG alebo archívy. OWASP odporúča kombinovať kontroly prípony, obsahu, oprávnení a ukladania. Žiadna jednotlivá kontrola nepokrýva všetky problémy. Úspešný antivírusový scan tiež neznamená, že súbor patrí k správnej objednávke alebo že ho smie konkrétny človek čítať.
Privátna karanténa oddelí prijatie od sprístupnenia
Server najprv overí používateľa, jeho právo pridávať prílohy a cieľovú objednávku. Vytvorí záznam uploadu s vlastným náhodným identifikátorom a limitom veľkosti. Pôvodný názov môže zachovať ako zobrazované metadata, ale nepoužije ho ako cestu na disku. Obsah smeruje do privátneho priestoru, z ktorého aplikácia nevydáva bežné odkazy na stiahnutie.
Po dokončení sa preverí skutočná veľkosť, formát a integrita obsahu. Pri obrázkoch obmedzte aj počet pixelov a náklady dekódovania. Pri dokumentoch používajte aktualizované nástroje v oddelenom prostredí s obmedzeným časom a pamäťou. Veľký komprimovaný alebo poškodený vstup nemá vyčerpať celý aplikačný server. Nepotrebné archívy je jednoduchšie odmietnuť než pridávať ich všeobecné rozbaľovanie.
Podpísaná URL nie je kontrola súboru
Pri priamom uploade do Amazon S3 môže server vydať krátko platný presigned odkaz pre určený objekt. Držiteľ odkazu má počas jeho platnosti príslušnú možnosť použitia; odkaz nie je jednorazový. Upload na existujúci kľúč môže nahradiť jeho obsah. Preto vytvorte osobitný kľúč pre každý pokus, overte výsledný objekt a riešte aj možnosť opätovného zápisu.
Ilustračný návrh môže preverovať konkrétnu verziu objektu a po kontrole publikovať práve tú, alebo kopírovať overený obsah do chráneného finálneho priestoru. Dôležité je, aby stav ready odkazoval na obsah, ktorý kontrola skutočne posúdila. Inak môže odosielateľ po scane nahrať pod ten istý kľúč iný súbor. Samotný checksum nepotvrdzuje bezpečnosť; pomáha identifikovať overovaný obsah.
Dokončenie musí riadiť server
Volanie complete od klienta je oznámenie, že upload skončil. Server si sám overí existenciu, vlastníctvo a stav objektu. Používateľ nemôže poslať ľubovoľný kľúč iného klienta ani nastaviť vlastné scanPassed. Ak sa nahrávanie preruší, záznam zostane nedokončený a následné upratovanie odstráni nepotrebný objekt aj záznam podľa dohodnutej lehoty.
Prechod do pripraveného stavu urobte až po všetkých požadovaných kontrolách. Dvojité dokončenie nesmie vytvoriť dve prílohy. Súbežné vymazanie objednávky musí mať jasný výsledok, napríklad odmietnutie dokončenia a upratanie objektu. Stav v databáze a životný cyklus úložiska navrhnite spolu; bez toho časom vzniknú osirelé súbory alebo odkazy na chýbajúci obsah.
Pri sťahovaní znova overte oprávnenie
Znalosť ID prílohy alebo skrytá URL nie je právo čítať dokument. Server pri stiahnutí overí aktuálne členstvo, objednávku a stav prílohy. Ak vydáva dočasnú URL, zvážte jej platnosť aj okamih odvolania práv: už vydaný odkaz môže zostať použiteľný do expirácie. Pri dokumente vyžadujúcom okamžité odvolanie je vhodnejšie sprostredkovať každý prístup cez kontrolovaný endpoint.
Content-Disposition: attachment dá prehliadaču pokyn ponúknuť súbor na stiahnutie. X-Content-Type-Options: nosniff obmedzuje odhadovanie typu obsahu. Tieto hlavičky dopĺňajú bezpečné doručovanie, nenahrádzajú kontrolu vstupu. Aktívny používateľský obsah neservírujte ako HTML v rovnakom pôvode ako administráciu. Samostatne ošetrite zobrazovaný názov, aby sa nestal vstupom do hlavičky alebo HTML bez správneho kódovania.
Preverte aj nepríjemné vstupy
Testovacie súbory majú pokrývať odmietnutie, prerušenie aj súbeh. Limity odvoďte od potrebných dokumentov a dostupných zdrojov; číslo prevzaté z cudzieho projektu nemusí sedieť. Overte tiež obnovu príloh zo zálohy spolu s databázovými väzbami a možnosť dohľadať výsledok kontroly bez zaznamenávania samotného citlivého obsahu.
- Premenovaný nepovolený obsah sa nesprístupní iba vďaka prípone PDF.
- Používateľ iného klienta nedokončí ani nestiahne cudziu prílohu.
- Opakovaný upload po kontrole nezmení obsah pripravený na stiahnutie.
- Prerušený upload sa bezpečne uprace bez vymazania platnej prílohy.
Zdroje a dokumentácia
Pri implementácii skontrolujte dokumentáciu verzie, ktorú používate.
