Modulele de încărcare a fișierelor sunt una dintre cele mai slabe verigi din aplicațiile web. Orice greșeli făcute, chiar și cele pe care le considerați mici, ar putea duce la ca controlul serverului să cadă direct în mâinile unui atacator cibernetic. Din acest motiv, dezvoltatorii de software trebuie să cunoască cele mai frecvente greșeli și câteva metode de atac care pot apărea.
Deci, ce este manipularea din partea clientului? Cum puteți combate acest lucru pentru a vă menține site-urile și utilizatorii în siguranță?
Ce este manipularea pe partea clientului?
Modificarea la nivelul clientului este conceptul de bază al atacurilor aplicațiilor web în ansamblu. Mai simplu spus, înseamnă că nu mai poți avea încredere în niciuna dintre datele pe care le trimiți utilizatorului. În plus, manipularea la nivelul clientului este unul dintre fundamentele dezvoltării securizate a aplicațiilor. Dacă examinați modulul de încărcare a fișierelor cu care aveți de-a face și luați în considerare falsificarea din partea clientului, datele în care nu aveți încredere includ:
- Numele fișierului încărcat.
- Tipul de conținut al fișierului încărcat.
Aceste două elemente sunt unde ai ocazia să faci lista albă ca dezvoltator de software. Datele de nume ale fișierului încărcat pot conține orice cu manipulare pe partea clientului. Cu datele Content-Type ale fișierului încărcat, chiar dacă atacatorul încarcă un fișier .exe, acest fișier poate apărea ca imagine/jpeg în sistem.
Extensie de fișiere și Lista albă
În timpul dezvoltării modulelor de încărcare a fișierelor, primul lucru de făcut este procesul de înscriere în lista albă pentru extensia de fișier. De exemplu, un utilizator dorește să încarce un fișier numit „muo.jpeg”. Trebuie să vă asigurați că această extensie de fișier pe care utilizatorul dorește să o încarce este .jpeg. Pentru aceasta, sistemul ar trebui să verifice fișierul încărcat și să vadă dacă este una dintre extensiile de fișiere permise. Pentru a înțelege cum puteți face acest lucru, examinați următorul cod PHP simplu:
$file_parts = pathinfo($filename);
intrerupator($file_parts['extensie'])
{
caz "jpg":
pauză;caz "băţ": // Sau exe, dll, așa, etc.
pauză;
caz "":
cazNUL: // Fără extensie de fișier
pauză;
}
Puteți face acest lucru cu un bloc de cod similar cu cel de mai sus sau puteți utiliza clasele și funcțiile oferite de framework-ul pe care îl utilizați.
Aveți grijă să nu creați date de extensie de fișier prin analizarea numelui fișierului în funcție de caracterul punct (.), deoarece atacatorul poate ocoli acest pas de verificare cu un nume de fișier precum „muo.jpeg.php”.
Ce sunt informațiile despre tipul de conținut?
Informațiile despre tipul de conținut sunt o informație trimisă în cererea HTTP pentru fiecare încărcare de fișier. Browserul de internet detectează aceste informații și le adaugă la solicitarea trimisă. Atacatorul poate încerca să schimbe informațiile cu manipularea clientului și să ocolească validările pe partea serverului. În această etapă, dezvoltatorii au nevoie de un mecanism de control pentru a face validări asupra informațiilor despre tipul de conținut. Acest lucru singur nu va fi suficient; totuși, este o problemă importantă pe care dezvoltatorii trebuie să-i acorde atenție.
Să presupunem că codificați un mecanism pentru a verifica corect extensia fișierului și acceptați numai fișiere cu extensia .jpeg. În plus față de acest mecanism de precauție, puteți verifica informațiile despre tipul de conținut caz și acceptă numai fișiere cu informații imagine/jpeg, un nivel suplimentar de protecție împotriva atacuri cibernetice
Fișierele SWF Flash și pașii de atac
Extensia de fișier și datele tip Content nu înseamnă nimic pentru browserele de internet care acceptă plug-in-uri precum Adobe Flash Player. Deși suportul pentru acel player nu mai este disponibil, este totuși posibil să instalați acele fișiere asociate pe multe sisteme, chiar dacă Flash rămâne un risc de securitate. Într-un sistem care nu a luat măsurile de precauție relevante, este posibil să apelați un fișier Flash cu
Pentru a lua măsuri, dezvoltatorii trebuie să cunoască căile pe care le pot lua infractorii cibernetici. Iată cum se poate întâmpla:
- Atacatorul rău intenționat încarcă un SWF (un format de fișier Adobe Flash) numit „image.jpeg” pe site-ul web țintă. În timpul procesului de încărcare, se confirmă în verificarea listei albe că fișierul încărcat de atacator are extensia .jpeg. Verificarea tipului de conținut este ocolită cu falsificarea din partea clientului. Imaginați-vă că acest fișier, încărcat de actorul amenințării, ajunge la „www (dot) target-site (dot) com/images/images.jpeg”.
- Să presupunem că atacatorul are un site web numit atacator (punct) com. Atacatorul apelează fișierul image.jpeg încărcat pe site-ul țintă de pe acest site web, folosind
- Un utilizator nevinovat se conectează la atacator (dot) com. Site-ul respectiv apelează fișierul SWF la www (punct) site-țintă (punct) com/images/image.jpeg și execută comenzile date SWF.
- Prin aceasta, atacatorul cibernetic poate crea acțiuni de solicitare HTTP pentru adresa de com a site-ului țintă (punct) fără ca utilizatorii normali să observe. Cu aceste solicitări, atacatorul va folosi sesiunea utilizatorului nevinovat și va ocoli verificarea CSRF.
Pentru a înțelege mai clar acest scenariu de atac, luați în considerare următorul cod ca fiind în HTML
stil="înălțime: 1px; latime: 1px;" date="www.target-site.com/images/image.jpeg" tip="aplicație/x-shockwave-flash" allowscriptaccess="mereu" flashvars="c=citește&u=ceva"
Una dintre cele mai bune soluții este să accesați fișierele încărcate cu fișierul încărcat prin un subdomeniu diferit. În scenariul menționat mai sus, puteți accesa fișiere statice nu din același domeniu, ci dintr-un subdomeniu diferit, astfel: „http (colon)//file.target-site (dot) com/images/image.jpeg”.
O altă soluție este să adaugi Conținut-Dispoziție: atașament informații la răspunsul HTTP atunci când primiți o solicitare de acces la fișierele pe care doriți să le încărcați.
Luați măsuri de precauție pentru vulnerabilitățile de încărcare a fișierelor
Orice încărcare de fișiere pe care utilizatorii le pot face pe un site web este periculoasă, așa că aceasta este una dintre problemele cărora dezvoltatorii ar trebui să le acorde cea mai mare atenție. Dacă atacatorii descoperă o astfel de vulnerabilitate, pot deschide un shell în cadrul site-ului și pot exploata cu ușurință informațiile de pe server. Este extrem de important să controlați toate fișierele încărcate de utilizatori, să aplicați metode de lista albă și să ascundeți locația directorului încărcat, dacă este posibil.
Și, desigur, există mulți alți pași suplimentari pe care trebuie să îi luați pentru a vă proteja site-ul, chiar dacă luați toate măsurile de precauție recomandate pentru a încărca module de fișiere. Utilizarea antetelor de securitate HTTP este un astfel de pas pe care îl puteți face.