Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Moduły przesyłania plików to jedno z najsłabszych ogniw aplikacji webowych. Wszelkie popełnione błędy, nawet te, które uważasz za drobne, mogą spowodować, że kontrola nad serwerem wpadnie bezpośrednio w ręce cyberatakującego. Z tego powodu twórcy oprogramowania muszą znać najczęstsze błędy i niektóre metody ataków, które mogą wystąpić.

Czym jest manipulacja po stronie klienta? Jak możesz z tym walczyć, aby zapewnić bezpieczeństwo swoim witrynom i użytkownikom?

Czym jest manipulacja po stronie klienta?

Manipulowanie po stronie klienta jest podstawową koncepcją ataków na aplikacje internetowe jako całości. Mówiąc najprościej, oznacza to, że nie możesz już ufać żadnym danym, które wysyłasz do użytkownika. Ponadto manipulowanie po stronie klienta jest jednym z fundamentów bezpiecznego tworzenia aplikacji. Jeśli sprawdzisz moduł przesyłania plików, z którym masz do czynienia i rozważysz manipulację po stronie klienta, dane, którym nie możesz ufać, obejmują:

instagram viewer

  • Nazwa przesłanego pliku.
  • Content-Type przesłanego pliku.

Te dwa elementy są gdzie masz możliwość dodania do białej listy jako programista. Dane nazwy przesłanego pliku mogą zawierać wszystko, co jest modyfikowane po stronie klienta. W przypadku danych Content-Type przesłanego pliku, nawet jeśli atakujący przesyła plik .exe, plik ten może pojawić się w systemie jako obraz/jpeg.

Rozszerzenie pliku i biała lista

Podczas opracowywania modułów przesyłania plików pierwszą rzeczą do zrobienia jest proces umieszczania na białej liście dla rozszerzenia pliku. Na przykład użytkownik chce przesłać plik o nazwie „muo.jpeg”. Musisz upewnić się, że rozszerzenie pliku, które użytkownik chce przesłać, to .jpeg. W tym celu system powinien sprawdzić przesłany plik i sprawdzić, czy ma on jedno z dozwolonych rozszerzeń plików. Aby zrozumieć, jak to zrobić, przeanalizuj następujący prosty kod PHP:

$file_parts = pathinfo($filename);
przełącznik($file_parts['rozszerzenie'])
{
sprawa "jpg":
przerwa;

sprawa "nietoperz": // Lub exe, dll, so itd.
przerwa;

sprawa "":
sprawaZERO: // Brak rozszerzenia pliku
przerwa;
}

Możesz to zrobić za pomocą bloku kodu podobnego do powyższego lub możesz użyć klas i funkcji zapewnianych przez używany framework.

Uważaj, aby nie utworzyć danych rozszerzenia pliku, analizując nazwę pliku zgodnie ze znakiem kropki (.), ponieważ osoba atakująca może ominąć ten krok sprawdzania, używając nazwy pliku, takiej jak „muo.jpeg.php”.

Co to jest informacja o typie zawartości?

Informacje o typie zawartości to informacje wysyłane w żądaniu HTTP dla każdego przesłanego pliku. Przeglądarka internetowa wykrywa te informacje i dodaje je do wysłanego żądania. Osoba atakująca może próbować zmienić informacje, manipulując po stronie klienta i omijając sprawdzanie poprawności po stronie serwera. Na tym etapie programiści potrzebują mechanizmu kontrolnego do sprawdzania poprawności informacji typu Content-Type. Samo to nie wystarczy; mimo to jest to ważna kwestia, na którą deweloperzy powinni zwrócić uwagę.

Załóżmy, że kodujesz mechanizm sprawdzający poprawnie rozszerzenie pliku i akceptujesz tylko pliki z rozszerzeniem .jpeg. Oprócz tego mechanizmu zapobiegawczego możesz sprawdzić informacje o typie zawartości przypadku i akceptuj tylko pliki z informacjami o obrazie/jpeg, dodatkowy poziom ochrony przed ataki komputerowe

Pliki Flash SWF i kroki ataku

Rozszerzenie pliku i dane Content-Type nie mają znaczenia dla przeglądarek internetowych obsługujących wtyczki, takie jak Adobe Flash Player. Chociaż wsparcie dla tego odtwarzacza nie jest już dostępne, nadal można zainstalować te powiązane pliki w wielu systemach, mimo że Flash nadal stanowi zagrożenie dla bezpieczeństwa. W systemie, który nie podjął odpowiednich środków ostrożności, możliwe jest wywołanie pliku Flash z rozszerzeniem tag, niezależnie od jego rozszerzenia. Spowoduje to kolejny poważny problem z bezpieczeństwem.

Aby podjąć działania, programiści muszą znać ścieżki, którymi mogą podążać cyberprzestępcy. Oto jak to się może stać:

  1. Złośliwy atakujący przesyła plik SWF (format pliku Adobe Flash) o nazwie „image.jpeg” do docelowej witryny sieci Web. Podczas procesu wysyłania sprawdzana jest weryfikacja białej listy, czy plik przesłany przez atakującego ma rozszerzenie .jpeg. Weryfikacja typu zawartości jest pomijana przez manipulowanie po stronie klienta. Wyobraź sobie, że ten plik, przesłany przez cyberprzestępcę, trafia do „www (dot) target-site (dot) com/images/images.jpeg”.
  2. Załóżmy, że atakujący ma stronę internetową o nazwie atakujący (kropka) com. Atakujący wywołuje plik image.jpeg przesłany do docelowej witryny w tej witrynie, używając rozszerzenia tag z przypisaniem typu application/x-shockwave-flash.
  3. Niewinny użytkownik loguje się do atakującego (dot) com. Witryna ta wywołuje plik SWF pod adresem www (dot) target-site (dot) com/images/image.jpeg i wykonuje polecenia przekazane SWF.
  4. Dzięki temu cyberatakujący może tworzyć akcje żądań HTTP dla adresu docelowego (dot) com bez zauważenia zwykłych użytkowników. W przypadku tych żądań atakujący użyje sesji niewinnego użytkownika i ominie sprawdzenie CSRF.

Aby dokładniej zrozumieć ten scenariusz ataku, należy wziąć pod uwagę, że poniższy kod znajduje się w kodzie HTML treść wysłana do użytkownika przez atakującego (dot) com:

styl="wysokość: 1 piksel; szerokość: 1 piksel;" dane="www.target-site.com/images/image.jpeg" typ="application/x-shockwave-flash" zezwalaj na dostęp do skryptu="zawsze" zmienne flash="c=czytaj&u=coś"

Jednym z najlepszych rozwiązań jest dostęp do przesłanych plików za pomocą przesyłania plików przez inna subdomena. W powyższym scenariuszu dostęp do plików statycznych można uzyskać nie z tej samej domeny, ale z innej subdomeny w następujący sposób: „http (dwukropek)//file.target-site (dot) com/images/image.jpeg”.

Innym rozwiązaniem jest dodanie Treść-dyspozycja: załącznik informacje w odpowiedzi HTTP, gdy otrzymasz prośbę o dostęp do plików, które chcesz przesłać.

Zachowaj środki ostrożności w przypadku luk w przesyłaniu plików

Każde przesyłanie plików, które użytkownicy mogą wykonać na stronie internetowej, jest niebezpieczne, więc jest to jedna z kwestii, na którą programiści powinni zwrócić największą uwagę. Jeśli atakujący odkryją taką lukę, mogą otworzyć powłokę w witrynie i łatwo wykorzystać informacje na serwerze. Niezwykle ważne jest kontrolowanie wszystkich plików przesyłanych przez użytkowników, stosowanie metod białej listy i ukrywanie lokalizacji przesłanego katalogu, jeśli to możliwe.

I oczywiście jest wiele innych dodatkowych kroków, które musisz podjąć, aby chronić swoją witrynę, nawet jeśli zastosujesz wszystkie zalecane środki ostrożności podczas przesyłania modułów plików. Jednym z takich kroków, które możesz wykonać, jest użycie nagłówków bezpieczeństwa HTTP.