Studio projektowe
 



<<< Powrót


 

4.2. Wysyłanie plików na serwer – formularz

  

                Za każdym razem gdy mamy zamiar nadać użytkownikowi naszego serwisu prawa do jakichkolwiek modyfikacji plików, nasuwa się pytanie: czy to aby jest bezpieczne? No właśnie! Każda operacja na naszych plikach wiąże się z dużym niebezpieczeństwem. Trzeba jednak jasno powiedzieć że to niebezpieczeństwo związane jest głównie z błędami w skryptach, które popełniają twórcy serwisu. Najważniejszą zasadą bezpieczeństwa jaka obowiązuje w Internecie jest zabronienie wszystkiego, a następnie nadawanie praw użytkownikowi. Tak samo powinno być w przypadku naszych skryptów. Z resztą co ja będę tu wiele pisał, w podrozdziale: „Niebezpieczne skrypty!” wszystko dokładnie wyjaśnię i podam przykłady źle napisanych skryptów które mogą być przepustką dla hackerów i webmasterów do zarządzania naszym serwisem.

                Opisane w tym podrozdziale skrypty nie należy stosować jako gotowe rozwiązania. Są one niebezpieczne dla całego naszego serwisu. Ich celem jest zaprezentowanie metody przesyłania plików na serwer.

                Zacznę od prostego przykładu formularza:

 <form action="plik.php" method="post" enctype="multipart/form-data">

Wprowadź nazwę pliku: <input type="file" name="plik">
<br><input type="submit" value="prześlij">

</form>

I skryptu (plik.php) obsługującego formularz:

<?php
$file = $HTTP_POST_FILES["plik"]["tmp_name"];
$zapisz_jako = $HTTP_POST_FILES["plik"]["name"];
 
if (!copy($file, $zapisz_jako)) {

   print ("Kopiowanie pliku nie powiodło się...<br>\n");

print "<BR>Nazwa pliku: ".$HTTP_POST_FILES["plik"]["name"];

print "<BR>Rozmiar pliku: ".$HTTP_POST_FILES["plik"]["size"];

print "<BR>tymczasowo: ".$HTTP_POST_FILES["plik"]["tmp_name"];

print "<BR>Typ przesłanego pliku: ".$HTTP_POST_FILES["plik"]["type"];

?> 

Jak widzimy jest to bardzo prosta metoda. Nasz formularz prawie niczym nie różni się od tradycyjnego formularza GET czy POST. W nagłówku formularza dodaliśmy atrybut „enctype”, multipart/form-data. Skrypt php składa się z dwóch części: w pierwszej wykonywana jest operacja pobierania i kopiowania pliku do określonej lokalizacji, a w drugiej wypisywane są informacje o pliku. Za pomocą tych informacji możemy nadać szczegółowe kryteria co do rozmiaru czy też typu przesyłanych danych. To drugie ograniczenie jest szczególnie ważne. Nie możemy przecież pozwolić użytkownikowi na przesłanie na nasz serwer pliku o formacie *.php bo za pomocą odpowiednio napisanego skryptu mógłby np. zmienić ustawienia serwera, skasować lub zmodyfikować nasz serwis. Pamiętajmy że skrypty php mają duże możliwości więc namawiam do ostrożności. Istnieją również inne pliki które mogą porządnie namieszać na serwerze. Najlepiej jest ustalić jeden typ plików lub zbiór np.: *.txt, *.pdf, *.doc.