Moduli za učitavanje datoteka jedna su od najslabijih karika web aplikacija. Sve pogreške, čak i one koje smatrate malima, mogu rezultirati time da kontrola poslužitelja padne izravno u ruke kibernetičkog napadača. Iz tog razloga, programeri softvera trebaju znati koje su najčešće pogreške i neke metode napada koje se mogu dogoditi.
Dakle, što je petljanje na strani klijenta? Kako se možete boriti protiv toga da biste zaštitili svoje stranice i svoje korisnike?
Što je petljanje na strani klijenta?
Neovlašteno mijenjanje na strani klijenta osnovni je koncept napada na web aplikacije u cjelini. Jednostavno rečeno, to znači da više ne možete vjerovati podacima koje šaljete korisniku. Osim toga, petljanje na strani klijenta jedan je od temelja sigurnog razvoja aplikacija. Ako pregledate modul za učitavanje datoteka s kojim imate posla i razmislite o petljanju na strani klijenta, podaci kojima ne možete vjerovati uključuju:
- Naziv učitane datoteke.
- Content-Type učitane datoteke.
Ove dvije stavke su gdje imate priliku staviti na bijelu listu kao programer softvera. Podaci o nazivu učitane datoteke mogu sadržavati bilo što što je neovlašteno mijenjano na strani klijenta. Uz Content-Type podatke učitane datoteke, čak i ako napadač učitava .exe datoteku, ta se datoteka može pojaviti kao slika/jpeg u sustavu.
Ekstenzija datoteke i bijeli popis
Dok razvijate module za učitavanje datoteka, prvo što trebate učiniti je postupak stavljanja na popis dopuštenih ekstenzija datoteke. Na primjer, korisnik želi prenijeti datoteku pod nazivom "muo.jpeg". Morate provjeriti je li ekstenzija datoteke koju korisnik želi prenijeti .jpeg. Za to bi sustav trebao provjeriti učitanu datoteku i vidjeti je li to jedna od dopuštenih ekstenzija datoteke. Da biste razumjeli kako to možete učiniti, proučite sljedeći jednostavni PHP kôd:
$file_parts = pathinfo($filename);
sklopka($file_parts['ekstenzija'])
{
slučaj "jpg":
pauza;slučaj "šišmiš": // Ili exe, dll, so, itd.
pauza;
slučaj "":
slučajNULL: // Nema ekstenzije datoteke
pauza;
}
To možete učiniti pomoću bloka koda sličnog ovom gore ili možete koristiti klase i funkcije koje pruža okvir koji koristite.
Pazite da ne kreirate podatke o ekstenziji datoteke analiziranjem naziva datoteke prema znaku točke (.), jer napadač može zaobići ovaj korak provjere s nazivom datoteke kao što je "muo.jpeg.php".
Što su informacije o vrsti sadržaja?
Informacije o vrsti sadržaja su informacije koje se šalju u HTTP zahtjevu za svaki prijenos datoteke. Internetski preglednik otkriva te podatke i dodaje ih poslanom zahtjevu. Napadač može pokušati promijeniti informacije petljanjem na strani klijenta i zaobići provjere valjanosti na strani poslužitelja. U ovoj fazi programeri trebaju kontrolni mehanizam za provjeru valjanosti informacija o vrsti sadržaja. Samo ovo neće biti dovoljno; ipak, to je važno pitanje na koje programeri trebaju obratiti pozornost.
Recimo da kodirate mehanizam za ispravnu provjeru ekstenzije datoteke i prihvaćate samo datoteke s ekstenzijom .jpeg. Uz ovaj mehanizam predostrožnosti, možete odmah provjeriti informacije o vrsti sadržaja slučaju i prihvaća samo datoteke sa slikovnim/jpeg informacijama, dodatnu razinu zaštite od cyber napadi
SWF Flash datoteke i koraci napada
Ekstenzija datoteke i Content-Type podaci ne znače ništa internetskim preglednicima koji podržavaju dodatke kao što je Adobe Flash Player. Iako podrška za taj player više nije dostupna, još uvijek je moguće instalirati te povezane datoteke na mnogim sustavima, iako Flash ostaje sigurnosni rizik. U sustavu koji nije poduzeo odgovarajuće mjere opreza, moguće je pozvati Flash datoteku s
Kako bi poduzeli akciju, programeri moraju znati kojim putovima kibernetički kriminalci mogu krenuti. Evo kako se to može dogoditi:
- Zlonamjerni napadač učitava SWF (format datoteke Adobe Flash) pod nazivom "image.jpeg" na ciljnu web stranicu. Tijekom procesa učitavanja, u provjeri popisa dopuštenih potvrđuje se da datoteka koju je učitao napadač ima ekstenziju .jpeg. Provjera tipa sadržaja zaobilazi se petljanjem na strani klijenta. Zamislite da ova datoteka, koju je učitao akter prijetnje, ide na "www (točka) target-site (točka) com/images/images.jpeg".
- Recimo da napadač ima web stranicu pod nazivom napadač (točka) com. Napadač poziva datoteku image.jpeg prenesenu na ciljnu stranicu na ovoj web stranici, koristeći
- Nedužni se korisnik prijavljuje na napadač (dot) com. Ta stranica poziva SWF datoteku na www (točka) target-site (točka) com/images/image.jpeg i izvršava naredbe dane SWF-u.
- Kroz to, kibernetički napadač može kreirati radnje HTTP zahtjeva za ciljnu (dot) com adresu, a da obični korisnici to ne primijete. Ovim zahtjevima napadač će koristiti sesiju nedužnog korisnika i zaobići je provjera CSRF-a.
Da biste jasnije razumjeli ovaj scenarij napada, razmislite o sljedećem kodu u HTML-u
stil="visina: 1px; širina: 1px;" podaci="www.target-site.com/images/image.jpeg" vrsta="aplikacija/x-shockwave-flash" dopusti skriptni pristup="stalno" flashvars="c=čitaj&u=nešto"
Jedno od najboljih rješenja je pristup datotekama učitanim s učitavanjem datoteka putem drugu poddomenu. U gore navedenom scenariju možete pristupiti statičkim datotekama ne s iste domene, već s druge poddomene na sljedeći način: "http (dvotačka)//file.target-site (točka) com/images/image.jpeg".
Drugo rješenje je dodavanje Sadržaj-Dispozicija: prilog informacije na HTTP odgovor kada primite zahtjev za pristup datotekama koje želite prenijeti.
Poduzmite mjere opreza zbog ranjivosti učitavanja datoteka
Svako učitavanje datoteka koje korisnici mogu izvršiti na web mjesto je opasno, pa je to jedan od problema na koji programeri trebaju obratiti najviše pozornosti. Ako napadači otkriju takvu ranjivost, mogu otvoriti ljusku unutar stranice i lako iskoristiti informacije na poslužitelju. Od vitalne je važnosti kontrolirati sve datoteke koje su učitali korisnici, primijeniti metode popisa dopuštenih i sakriti lokaciju učitanog direktorija ako je moguće.
I naravno, postoje mnogi drugi dodatni koraci koje morate poduzeti kako biste zaštitili svoju stranicu, čak i ako poduzmete sve savjetovane mjere opreza za učitavanje modula datoteka. Korištenje HTTP sigurnosnih zaglavlja jedan je takav korak koji možete poduzeti.