Turvaline failide üleslaadimise funktsioon sõltub mitmest koos rakendatavast kontrollist ning OWASP File Upload Cheat Sheet loetleb need üles. Selles artiklis käime selle loetelu läbi, toome välja punktid, mis jäävad kergesti tegemata, ning muudame loetelu testideks, mida saate käivitada iga üleslaadimise lõpp-punkti vastu.
Mille vastu te end kaitsete
Cheat Sheet rühmitab ohud pealkirja "malicious files" (pahatahtlikud failid) alla. Esimene neist on rünne faili töötleva tarkvara vastu. Ründaja esitab faili, mis kasutab ära parseri või töötlusmooduli haavatavust, ning juhendis tuuakse näidetena ImageTrick exploit ja XXE.
Teine on andmepüük. Juhendis on näiteks karjäärivorm, mis tähendab, et üleslaadimisest saab viis, kuidas panna vaenulik fail nende inimeste ette, kes selle avavad.
Kolmas on käideldavus. ZIP-pommid, XML-pommid (billion laughs attack) ja lihtsalt väga suured failid võivad täita serveri salvestusruumi ja kahjustada serveri käideldavust.
Valideerige enne vastuvõtmist
Juhend näeb ette kindla järjekorra: rakendage sisendi valideerimist enne laiendi valideerimist. Seejärel tuleb toetuda lubatud väärtuste loetelule (allowlist).
- Loetlege lubatud laiendid. Lubage ainult need ohutud laiendid, mida äriprotsess vajab. Profiilifoto vormil pole põhjust aktsepteerida muud kui mõnda pildivormingut.
- Valideerige faili tüüp. Ärge toetuge deklareeritud
Content-Typeväärtusele, sest seda saab võltsida. Valideerige faili tüüp ja signatuur enne üleslaadimise vastuvõtmist. - Määrake failinime pikkuse piir ja piirake lubatud märke, kui see on võimalik.
- Määrake failisuuruse piir.
Kui fail ei läbi mõnda neist kontrollidest, lükake see tagasi.
Käsitlege nime ja asukohta hoolikalt
Juhendi järgi tuleb kasutaja antud failinimi asendada rakenduse genereeritud nimega. Tehke seda iga üleslaadimise puhul, olenemata faili tüübist.
Faili salvestuskoht on sama oluline kui faili enda sisu. Hoidke üleslaaditud faile võimaluse korral eraldi serveris. Kui see pole võimalik, salvestage need väljapoole webroot'i.
Kui failid peavad olema avalikult kättesaadavad, kasutage rakendusesisest töötlejat (handler), mis seostab identifikaatori failiga (someid → file.ext), selle asemel et avaldada salvestuskoha teed.
Veel kaks loetelu punkti, mis kipuvad ununema:
- Faile peaksid saama üles laadida ainult volitatud kasutajad.
- Kaitske üleslaadimist CSRF-rünnakute eest.
Skannige ja töödelge seda, mida säilitate
Valideerimine kontrollib, et fail näeb õige välja. Juhend lisab veel ühe sammu: kui võimalik, laske fail läbi viirusetõrjemootori või sandboxi, et veenduda, et selles pole pahatahtlikke andmeid.
Sobivate dokumenditüüpide, näiteks PDF ja DOCX puhul kaaluge täiendava töötlusetapina CDR-i (Content Disarm & Reconstruct).
Juhend märgib ka, et kõik kasutatavad teegid peavad olema turvaliselt konfigureeritud ja ajakohased. Kuna parserite haavatavused kuuluvad nimetatud ohtude hulka, tasub see punkt määrata nimeliselt vastutavale isikule koos ülevaatuse kuupäevaga.
Testige iga lõpp-punkti
Cheat Sheet loetleb kontrolle, mitte testjuhtumeid. Iga allolev rida on meie enda tuletis selle kontrollnimekirjast ja kolmas veerg näitab, millisest punktist see pärineb. Käivitage testid iga üleslaadimise lõpp-punkti vastu, sealhulgas administreerimisvahendite ja ühe kliendi jaoks lisatud lõpp-punktide vastu.
| Test | Läbitud test | Alus |
|---|---|---|
| Laadige üles lubatud laiendiga skriptifail | Lükatakse tagasi faili tüübi valideerimisel | Tuletatud: faili tüübi valideerimine |
Saatke keelatud fail koos lubatud Content-Type väärtusega | Lükatakse ikkagi tagasi | Tuletatud: ärge usaldage Content-Type päist |
| Esitage väga pikk failinimi | Lükatakse tagasi või asendatakse genereeritud nimega | Tuletatud: failinime pikkuse piir, genereeritud failinimed |
| Laadige üles fail, mis ületab suuruse piiri | Keeldutakse | Tuletatud: failisuuruse piir |
| Küsige salvestatud faili, arvates ära selle tee | Pole kättesaadav muidu kui töötleja kaudu | Tuletatud: salvestuskoht, seostav töötleja |
| Laadige üles ilma sessioonita või ilma CSRF-tokenita | Keeldutakse | Tuletatud: volitatud kasutajad, CSRF-kaitse |
| Laadige testkeskkonnas üles ZIP- või XML-pomm | Teenus jääb kättesaadavaks | Tuletatud: käideldavuse oht |
Laiema ülevaate saamiseks: OWASP Web Security Testing Guide kirjeldab ennast kui veebirakenduste arendajate ja turvaspetsialistide esmaklassilist küberturvalisuse testimise allikat. OWASP Application Security Verification Standard pakub nummerdatud nõudeid, mille vastu verifitseerida. Kui viitate sellele pileti või aruande koosseisus, lisage versioon, näiteks v5.0.0-1.2.5, sest identifikaatorid võivad standardi versioonide vahel muutuda.
Kust alustada
- Koostage loetelu kõigist lõpp-punktidest, mis võtavad vastu faile, sealhulgas administreerimisvahenditest, impordifunktsioonidest ja vanadest pluginatest.
- Määrake igaühe jaoks lubatud laiendid, maksimaalne failisuurus ja maksimaalne failinime pikkus ning rakendage sisendi valideerimist enne laiendi kontrolli.
- Asendage kasutaja antud failinimed genereeritutega. Viige salvestus eraldi serverisse või väljapoole webroot'i ning serveerige avalikke faile töötleja kaudu, mis seostab ID-d failinimedega.
- Lisage faili tüübi ja signatuuri valideerimine, viirusetõrje või sandboxi samm ning CDR teie vastu võetavate dokumenditüüpide jaoks. Kontrollige, et parsimisteegid on ajakohased ja turvaliselt konfigureeritud.
- Muutke testitabel skriptitud kontrollideks ja käivitage need enne iga väljalaset. Kui soovite tulemusele välist hinnangut, saab meie läbitungimistestimise teenus lõpp-punkte testida ning meie turvalise tarkvaraarenduse tugi aitab, kui funktsioon on alles kavandamise etapis. OWASP-i failide üleslaadimise juhend sobib mõlemal juhul ülevaatuse kontrollnimekirjaks.
