Przejdź do głównej zawartości

Mechanizm uploadu plików w PHP

Praca indywidualna – 4–6 stron A4

📤 Mechanizm uploadu plików w PHP

Opracowanie dotyczy mechanizmu przesyłania plików z przeglądarki na serwer w aplikacjach PHP. Upload plików to funkcjonalność wykorzystywana w niemal każdej aplikacji webowej – od prostych formularzy kontaktowych z załącznikami, przez systemy CMS, po platformy e-commerce. Jest to również jeden z najbardziej niebezpiecznych wektorów ataku, jeśli nie zostanie odpowiednio zabezpieczony. Praca koncentruje się na superglobalnej tablicy $_FILES, funkcji move_uploaded_file() oraz kompleksowej walidacji przesyłanych plików.


Upload plików jest powszechną funkcjonalnością, ale też źródłem wielu zagrożeń:

  1. Praktyczne zastosowanie – awatary, dokumenty, zdjęcia produktów, CV
  2. Bezpieczeństwo – niewłaściwa walidacja może prowadzić do przejęcia serwera (RCE)
  3. Wymogi biznesowe – większość aplikacji wymaga tej funkcjonalności
  4. Egzaminy zawodowe – temat często pojawia się na INF.03/INF.04
  5. Podstawa dla zaawansowanych tematów – przetwarzanie obrazów, integracja z chmurą

  1. Zrozumieć mechanizm przesyłania plików HTTP (multipart/form-data)
  2. Poznać strukturę tablicy $_FILES i jej elementy
  3. Opanować walidację typu MIME, rozszerzenia i rozmiaru pliku
  4. Zidentyfikować zagrożenia związane z uploadem (RCE, path traversal)
  5. Wdrożyć bezpieczny upload w praktycznym przykładzie

W pracy muszą znaleźć się następujące elementy:

  • Formularz HTML – atrybut enctype="multipart/form-data"
  • Tablica $_FILES – struktura i znaczenie kluczy (name, type, tmp_name, error, size)
  • Katalog tymczasowy – gdzie PHP przechowuje uploadowane pliki
  • move_uploaded_file() – przeniesienie pliku do docelowej lokalizacji
  • Walidacja rozszerzenia – whitelist dozwolonych rozszerzeń
  • Walidacja typu MIMEmime_content_type() lub finfo_file()
  • Walidacja rozmiaruupload_max_filesize, post_max_size
  • Kody błędów – UPLOAD_ERR_OK, UPLOAD_ERR_INI_SIZE, itd.
  • Remote Code Execution (RCE) – wykonanie złośliwego kodu na serwerze
  • Path traversal – manipulacja ścieżką zapisu
  • Denial of Service – wyczerpanie miejsca na dysku
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Upload pliku</title>
</head>
<body>
<h1>Prześlij plik</h1>
<!-- WAŻNE: enctype="multipart/form-data" jest OBOWIĄZKOWY -->
<form action="upload.php" method="POST" enctype="multipart/form-data">
<label for="file">Wybierz plik (max 2MB, tylko obrazy):</label>
<input type="file" name="uploaded_file" id="file" accept="image/*" required>
<button type="submit">Wyślij</button>
</form>
</body>
</html>

Dla osób chcących pogłębić temat:

  • Upload wielu plików – obsługa tablicy plików
  • Walidacja zawartości obrazugetimagesize()
  • Przechowywanie w chmurze – integracja z S3, Google Cloud Storage
  • Progress bar – śledzenie postępu uploadu (AJAX)
  • Przetwarzanie obrazów – generowanie miniatur (GD, Imagick)
  • Antywirus – skanowanie przesyłanych plików

  1. Wstęp – rola uploadu plików w aplikacjach webowych
  2. Mechanizm HTTP – multipart/form-data, nagłówki
  3. Formularz HTML – atrybut enctype, input type file
  4. PHP i $_FILES – struktura tablicy, tmp_name
  5. Walidacja – typ MIME, rozszerzenie, rozmiar
  6. Zagrożenia – RCE, path traversal, DoS
  7. Bezpieczna implementacja – kompletny przykład
  8. Dobre praktyki – podsumowanie rekomendacji

Autor pracy powinien potrafić odpowiedzieć na pytania:

  1. Dlaczego atrybut enctype="multipart/form-data" jest wymagany?
  2. Czym jest $_FILES['file']['tmp_name'] i dlaczego nie można mu ufać bezpośrednio?
  3. Dlaczego nie należy ufać $_FILES['file']['type']?
  4. Co to jest atak RCE i jak może być przeprowadzony przez upload?
  5. Jak działa funkcja move_uploaded_file() i dlaczego jest bezpieczniejsza niż copy()?
  6. Czym jest whitelist rozszerzeń i dlaczego jest lepsza od blacklisty?
  7. Jak zabezpieczyć się przed path traversal w nazwie pliku?
  8. Jakie ustawienia php.ini wpływają na upload plików?