Funcțiile de încărcare a fișierelor sunt utile pentru formulare, profiluri, produse și documente, dar pot deveni o cale de introducere a conținutului malițios. Verificarea extensiei singure nu este suficientă: aplicația trebuie să valideze conținutul, dimensiunea, numele și locul în care salvează fișierul.

Acceptă numai tipurile necesare
Definește o listă clară de formate permise și respinge tot ce nu este necesar. Verifică tipul MIME pe server, nu doar extensia sau valoarea trimisă de browser. Pentru imagini, poți procesa fișierul și genera o copie nouă în loc să servești direct fișierul original.
Limitează dimensiunea și numărul
Stabilește limite rezonabile pentru dimensiune, număr de fișiere și frecvența încărcărilor. Aceste praguri trebuie să fie compatibile cu limitele PHP și ale serverului. Afișează mesaje clare atunci când un fișier este prea mare.
Redenumește fișierele
Nu folosi numele primit de la utilizator ca nume final fără verificări. Generează un identificator aleatoriu și păstrează extensia validată. Evită caracterele speciale și secvențele care pot schimba calea de stocare.
Blochează execuția în directoarele de upload
Fișierele încărcate nu ar trebui să poată rula ca scripturi. Configurația exactă depinde de Apache, LiteSpeed sau Nginx. Testează regula pe serverul tău și verifică să nu blochezi imaginile, PDF-urile sau fișierele legitime.
Folosește protecții CSRF și autorizare
Verifică dacă utilizatorul are dreptul să încarce fișierul și leagă cererea de o sesiune validă. Pentru formulare publice, aplică limitare de rată, protecție anti-spam și validare server-side.
Scanează și monitorizează
Pentru tipurile de fișiere cu risc mai ridicat, folosește scanare malware și păstrează loguri despre încărcări. Nu expune URL-uri private și nu stoca documente sensibile într-o locație publică fără control de acces.
Resurse și lecturi suplimentare
Pentru detalii tehnice, consultă OWASP File Upload Cheat Sheet și WordPress Media Handling.
Poți aprofunda subiectul și în materialele YulY despre permisiuni sigure pentru fișiere WordPress și detectarea malware în WordPress.
Concluzie
Un upload sigur combină validarea server-side, limite, nume generate, permisiuni și blocarea execuției. Nu te baza doar pe extensia fișierului sau pe filtrarea din browser.

