Określ, jaki plik jest potrzebny do załatwienia sprawy

Pole „dodaj dowolny załącznik” przenosi problem z projektu na serwer i pracownika. Zacznij od rzeczywistego procesu. Do zgłoszenia uszkodzenia może wystarczyć zdjęcie, do wyceny wydruku konkretny dokument, a do zgłoszenia serwisowego krótki zestaw plików. Ustal formaty, liczbę załączników i maksymalny rozmiar. Pokaż te warunki przed wyborem pliku, aby klient nie dowiadywał się o nich po długim wysyłaniu.

Rozważ również, czy potrzebny jest oryginał. Zdjęcie do publicznej galerii można przepisać do docelowego formatu i przygotować mniejsze wersje. Dokument techniczny wymagający zachowania podpisu lub struktury to inny przypadek. Nie stosuj jednej procedury do wszystkich materiałów. W przykładowym serwisie napraw przedmiotem zgłoszenia są fotografie usterki, nie komplet prywatnych dokumentów klienta. Ograniczenie zakresu upraszcza zarówno używanie, jak i ochronę systemu.

Nazwa i rozszerzenie nie potwierdzają zawartości

Atrybut accept w formularzu jest wskazówką dla przeglądarki, a nie zabezpieczeniem serwera. Podobnie deklarowany typ przesłany razem z plikiem nie stanowi wiarygodnego dowodu. Weryfikacja powinna łączyć listę dopuszczonych rozszerzeń, rozpoznanie zawartości i próby właściwe dla formatu. Dla obrazu istotne są też wymiary i koszt dekodowania. Niewielki plik na dysku może po rozpakowaniu wymagać znacznie większej ilości pamięci.

Nie próbuj uzyskać bezpieczeństwa przez samą listę zakazanych końcówek. Nowe warianty i niejednoznaczne nazwy łatwo przeoczyć. Aplikacja powinna nadawać własny identyfikator magazynowy, zachowując nazwę klienta wyłącznie jako opis. Ustal, co stanie się z błędnym, uszkodzonym lub częściowo przesłanym plikiem. Nie powinien dostać tego samego statusu co dokument sprawdzony i gotowy do udostępnienia pracownikowi.

Oddziel przyjęcie od udostępnienia

Przydatny model ma kilka stanów: odebrany, w sprawdzaniu, zaakceptowany albo odrzucony. Klient może otrzymać potwierdzenie odbioru zgłoszenia wcześniej niż zakończy się analiza załącznika. Komunikat musi jednak jasno rozróżniać te etapy. Magazyn kwarantanny powinien być odseparowany od publicznego katalogu strony. Sam nieprzewidywalny adres pliku nie zastępuje sprawdzenia uprawnień osoby, która chce go pobrać.

Dla dokumentów można przewidzieć skanowanie, a dla wspieranych obrazów ponowne zakodowanie. Są to elementy ochrony warstwowej, nie obietnica wykrycia każdego zagrożenia. Nie przesyłaj prywatnych materiałów do przypadkowej publicznej usługi sprawdzającej bez oceny, co dzieje się z ich treścią. Gdy analiza jest niedostępna, zaprojektuj stan oczekiwania lub kontrolowaną odmowę, zamiast automatycznie dopuszczać plik tylko po to, by proces zakończył się zielonym komunikatem.

Pobranie powinno sprawdzać sprawę i użytkownika

Załącznik powiąż z konkretnym zgłoszeniem oraz właścicielem danych. Kontrola dostępu jest potrzebna przy każdym pobraniu, nie tylko przy wyświetlaniu listy. Pracownik uprawniony do jednej sprawy nie powinien odczytać dokumentu innego klienta przez zmianę numeru w adresie. Zadbaj także o sposób zwracania pliku: format, nazwę pobierania i nagłówki odpowiadające temu, czy materiał ma się otworzyć, czy zostać zapisany na urządzeniu.

W przykładowym portalu obsługi link wysłany e-mailem może prowadzić najpierw do logowania, a dopiero później do dokumentu. Przy czasowym udostępnieniu określ czas ważności, możliwość cofnięcia i zakres. Nie dodawaj stałych adresów prywatnych plików do publicznej mapy witryny. Pamiętaj o miniaturach i podglądach: jeżeli oryginał jest chroniony, jego wygenerowana kopia nie może przypadkiem pozostać dostępna bez autoryzacji.

Daj klientowi kontrolę nad wysyłaniem

Pokaż nazwę, rozmiar i stan każdego pliku. Pozwól usunąć omyłkowy załącznik przed wysłaniem formularza. Jeśli połączenie się urwie, nie każ ponownie wpisywać całego opisu problemu. Jednocześnie nie obiecuj zachowania pliku, którego serwer jeszcze nie otrzymał. Wskaźnik postępu transferu i zakończenie kontroli bezpieczeństwa to różne informacje. Warto je rozdzielić, szczególnie przy większych dokumentach oraz wolnym internecie.

Limity po stronie formularza, PHP i serwera WWW muszą być ze sobą zgodne. Gdy serwer odrzuci całe żądanie przed uruchomieniem aplikacji, użytkownik potrzebuje sensownego komunikatu, a nie pustego ekranu. Przetestuj wysłanie pliku granicznej wielkości oraz kilku poprawnych plików, których suma jest za duża. Nie pozwalaj też, aby jedna osoba zapełniła cały magazyn wieloma małymi załącznikami. Limit pojedynczego pliku nie rozwiązuje problemu łącznego wykorzystania zasobów.

Sprawdź również sprzątanie i sytuacje awaryjne

Odbiór funkcji powinien obejmować więcej niż udane wysłanie zdjęcia. Przetestuj błędną nazwę, niezgodną zawartość, przerwany transfer, niedostępny skaner, brak miejsca oraz próbę pobrania bez uprawnień. W logach zapisuj identyfikatory i stan operacji, nie całe dokumenty. Ustal, jak administrator zobaczy materiały oczekujące zbyt długo i jak rozpozna zgłoszenie, w którym tekst dotarł, lecz załącznik został odrzucony.

Na końcu zdefiniuj usuwanie plików tymczasowych i dokumentów, które nie są już potrzebne. Usunięcie wiersza ze zgłoszeniem nie musi automatycznie usuwać pliku z dysku ani jego podglądu. Potrzebna jest spójna procedura wraz z kontrolą osieroconych zasobów. Bezpieczna obsługa załączników obejmuje cały cykl życia: wybór, odbiór, analizę, udostępnienie i zakończenie przechowywania. Dopiero taki model pozwala ocenić, czy funkcja jest gotowa do pracy z rzeczywistymi klientami.

Czytaj dalej