Kompleksowe rozwiązania dla biznesu

Bezpieczny upload na serwer w mniej niż 10 minut

Bezpieczny upload na serwer w mniej niż 10 minut

Krótki tutorial o tym jak zbudować skrypt do przesyłania plików na serwer w kilka minut, który gwarantuje minimum bezpieczeństwa. Skorzystamy z mechanizmów, które można zdefiniować w pliku .htaccess serwera www.

Założenie jest takie, aby przy pomocy www skopiować plik z lokalnego dysku na serwer, który będzie dostępny (oczywiście po uwierzytelnieniu) dla innych użytkowników oraz nas samych.

Formularz HTML do przesyłania plików wygląda następująco:

Aby poprawnie przesyłać pliki w sekcji <form> koniecznie należy umieścić enctype="multipart/form-data". Przy pomocy stałej MAX_FILE_SIZE możemy sterować rozmiarem maksymalnym przesyłanego pliku. Wartość podaje się w bajtach.

Po wybraniu pliku z dysku i wysłaniu skrypt powinien odpowiednio zareagować na podany plik. Kod jest jeszcze bardziej trywiwalny:

Korzystamy z funkcji is_uploaded_file dzięki czemu będziemy mieli pewność, że plik jest przekazywany z poziomu naszego skryptu. Mocno ogranicza to próby naruszania bezpieczeństwa. Możnaby przecież próbować pod zmienną $_FILES podstawić np. plik /etc/passwd. Funkcja zwraca wartość TRUE jeśli plik przekazany został przez HTTP. Kolejny krok to zapisanie pliku w odpowiednim miejscu na serwerze. W powyższym przykładzie jest to katalog files gdzie umieszczamy przesyłane pliki.

Na koniec warto zabezpieczyć nasz skrypt hasłem, aby tylko autoryzowany użytkownik mógł z niego skorzystać. W naszym przykładzie skorzystaliśmy z pliku .htaccess oraz .htpasswd. Umieszczamy plik .htaccess w głównym katalogu naszego skryptu o takiej zawartości:

Spowoduje to, że próba dostępu do naszego skryptu wywoła okno przeglądarki z prośbą o podanie loginu i hasła dostępu. Musimy podać login i hasło, które znajduje się w pliku, na który wskazuje ścieżka dyrektywy AuthUserFile/www/uploads/.htpasswd. Mankamentem tego rozwiązania jest fakt, że musimy podać bezpośrednią ścieżkę do tego pliku – ścieżka pośrednia niestety plik podany ścieżką pośrednią nie będzie widoczny, przez co nigdy nie uda nam sie zalogować. Aby uzyskać pełną ścieżkę do katalogu, w którym znajduje się nasz skrypt, możemy uruchomić w przeglądarce skrypt. np. test.php  z następującym kodem:

Uzyskamy wtedy pełną ścieżkę do naszego katalogu ze skryptem. W naszym przypadku wynik: /www/uploads

Loginy i hasła użytkowników zapisujemy w pliku .htpasswd, np.:

Hasło użytkownika admin jest oczywiście zaszyfrowane. Do generowania hasła warto skorzystać z formularzy dostępnych online. W kolejnych liniach podajemy kolejnych użytkowników i ich hasła po dwukropku.