Stworzenie bezpiecznego uploadu. |
Stworzenie bezpiecznego uploadu. |
10.11.2015, 18:34:42
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 18.04.2015 Ostrzeżenie: (0%) |
Można weryfikować rozszerzenia, mime_types, sprawdzić czy plik jest obrazkiem. Wszystko to da się obejść. Czy dodanie tego do .htaccess załatwi sprawe:
Jest jakieś lepsze rozwiązanie? |
|
|
10.11.2015, 18:58:51
Post
#2
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
Jak tylko obrazki to getimagesize.
-------------------- |
|
|
10.11.2015, 19:11:14
Post
#3
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 18.04.2015 Ostrzeżenie: (0%) |
Zastanawia mnie czy archiwa niosą jakies zagrożenia.(.rar,.zip,.7zip)
Dozwolone będą nie tylko pliki graficzne. Trzeba prawdopodobnie pozbawić pliki możliwości wykonywania. Czy zaszyfrowanie pliku podczas uploadu i odszyfrowanie podczas ściągania może być zebezpieczeniem? |
|
|
10.11.2015, 19:41:42
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Pytanie podstawowe co biędziesz z tymi plikami robił.
|
|
|
10.11.2015, 20:25:42
Post
#5
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 18.04.2015 Ostrzeżenie: (0%) |
Pliki będą wrzucone na serwer.(upload dostępny dla każdego) Póżniej ktoś sobie je ściągnie.
|
|
|
10.11.2015, 22:25:45
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 844 Pomógł: 227 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
możesz zapisywać na serwerze pliki bez rozszerzeń, a w bazie zapisujesz informację o prawdziwej nazwie i prawdziwym rozszerzeniu, a potem gdy ma plik zostać pobrany, to pobiera ten plik z oryginalną nazwą i rozszerzeniem.
|
|
|
11.11.2015, 09:06:30
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Wydaje mi się (jeśli tylko się wydaje to mnie poprawcie) ale jak będziesz serwował pliki poprzez skrypt php, to wrzucając nagłówek "application/octet-stream" ktoś sobie to pobierze. Wczytanie pliku przez stream nie powinno wywołać żadnego nieszczęścia.
W skrócie, jeśli zablokujesz dostęp publiczny do plików i będziesz serwował przez skrypt to nie musisz martwić się o zabezpieczenia. |
|
|
11.11.2015, 09:13:16
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Chyba wszystkie wysłane do przeglądarki pliki jako download będą bezpieczne chociaż nigdy nie można mieć w 100% pewności co tam pomysłowi włamywacze wymyślą.
Lepszą opcją jest moim zdaniem serwowanie plików z domeny statycznej gdzie nie ma żadnego parsera, co za tym idzie możliwości uruchomienia kodu. -------------------- |
|
|
11.11.2015, 10:50:16
Post
#9
|
|
Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) |
Zastanawia mnie czy archiwa niosą jakies zagrożenia.(.rar,.zip,.7zip) W pewnych sytuacjach tak. Na początek warto zapoznać się z tzw. "Zip bomb" i 42.zip czyli zipe, który zajmuje 42 kilobajty, a rozpakowuje się do 4.5 PETAbajtów :-)Dodatkowo do zipa oprócz zwykłych plików i katalogów możesz dodać linki symboliczne, które po rozpakowaniu na serwerze, w pewnych sytuacjach mogą zaburzać logikę aplikacji, albo udostępniać informacje. Przykład: Jest panel, gdzie użytkownik uploaduje zipa, który jest rozpakowany na serwerze za pomocą system("unzip $plik -d $katalog"). Może sobie także na stronie przeglądać spakowane pliki, ale tylko *.jpg. W takich okolicznościach atakujący może wrzucić do zipa link symboliczny z nazwą test.jpg, kierujący do jakiegoś pliku php (albo chociażby /etc/passwd) aby zobaczyć jego zawartość. W przeglądarce będzie to wyglądać jak "zepsuty obrazek" bo obrazkiem oczywiście nie będzie, tylko źródłem pliku do którego linkowaliśmy. Jak zrobić takiego zipa na linuxie: Kod mkdir evilzip cd evilzip/ ln -s /etc/passwd evil.jpg ln -s ../albo/jakis/plik.php evil2.jpg zip --symlinks -r ../evil.zip * Edit: No i polecam też obejrzeć sobie prezentację Gynvaela "Dziesięć tysięcy pułapek: ZIP, RAR, etc." z SEConference 2013 Ten post edytował redeemer 11.11.2015, 10:52:40 -------------------- |
|
|
11.11.2015, 13:11:28
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
Wydaje mi się (jeśli tylko się wydaje to mnie poprawcie) ale jak będziesz serwował pliki poprzez skrypt php, to wrzucając nagłówek "application/octet-stream" ktoś sobie to pobierze. Od tego jest nagłówek Content-Disposition. Niemniej ustawienie egzotycznego typu MIME też działa, chociaż w teorii jest niezgodne ze sztuką -------------------- ★Mój blog || Okiem krytyka★
|
|
|
11.11.2015, 17:47:48
Post
#11
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 18.04.2015 Ostrzeżenie: (0%) |
Według mnie jest jeszcze jeden sposób. Można pobrać plik przez skrypt. Następnie zapakować go do archiwum z losową nazwą i hasłem. Zapisać to w bazie danych. Przed ściągnięciem rozpakować i wysłać.
|
|
|
11.11.2015, 18:38:53
Post
#12
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) |
Zacznijmy od tego że plików graficznych się nie wgrywa, tylko na ich podstawie konwertuje do odpowiedniego formatu. Prócz wspomnianych podstaw mime type, getimagesize jest jeszcze exif_imagetype. Jednak to wszystko można obejść dość prosto zmieniając metatagi danego pliku. Dlatego wrzucasz plik, jakąś biblioteką do obróbki grafiki konwertujesz na odpowiedni format, kasujesz oryginał i dopiero wtedy pokazujesz to światu. Prócz tego w katalogu w którym zapisujesz pliki od użytkowników blokujesz możliwość wykonywania.
Ten post edytował !*! 11.11.2015, 18:45:48 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
Wersja Lo-Fi | Aktualny czas: 3.06.2024 - 23:33 |