Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Detekcja typu plikow
zdandro
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.03.2004

Ostrzeżenie: (0%)
-----


Witam wszystkich.

Mam taki problem - otoz stworzylem skryt uploadujacy plik (Cv) na serwer. Mozliwy jest upload tylko 5 typow plikow - *.pdf, *txt, *rtf, *doc i *.docx. Jak na razie dziala to w oparciu o sprawdzanie typu MIME poszczegolnych plikow. I TU wasnie tkwi problem - uzytkownik moze zmienic rozszerzenie pliku *.exe na *.txt powiedzmy i pozniej moj klient uruchomi taki plik ktora jest w rzeczywistosci szkodliwa aplikacja lub szkodliwym plikiem *.vb, *.js badz jeszcze innym... Czy mozna sprawdzic jaki typ pliku jest rzeczywiscie uplodowany? Sprawdzania naglowkow jest mozliwe przy plikach graficznych wiec jak to zrobic przy dokumentach?

Z gory dziekuje z odpowiedz

Oto kod skryptu:

  1. <?php
  2. $correctdate = time('H-i-s');
  3.  
  4. if( is_uploaded_file( $_FILES['userfile']['tmp_name'] ))
  5. {
  6. if (($_FILES['userfile']['type'] == 'application/msword') ||
  7. ($_FILES['userfile']['type'] == 'application/pdf') ||
  8. ($_FILES['userfile']['type'] == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') ||
  9. ($_FILES['userfile']['type'] == 'text/plain') ||
  10. ($_FILES['userfile']['type'] == 'application/rtf'))
  11. {
  12.  
  13. $strUploadDir = 'Cv/' .$correctdate."-". $_FILES['userfile']['name'];
  14.  
  15. if( move_uploaded_file( $_FILES['userfile']['tmp_name'], $strUploadDir ))
  16. {
  17. echo '<div id=\"MsgUpload\">File has been uploaded successfully.</div>';
  18. }
  19. else
  20. {
  21. echo '<div id=\"MsgUpload\">There have been some errors :(</div>';
  22. }
  23. }
  24. else
  25. {
  26. echo '<div id=\"MsgUpload\">Sorry. Wrong file type. Only particular file types are accepted: *.doc, *.docx, *.txt, *.rtf, *.pdf .</div>';
  27. }
  28. }
  29. ?>
  30.  
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Może pomoże http://www.beldzio.com/bezpieczny-upload-plikow
Go to the top of the page
+Quote Post
zdandro
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.03.2004

Ostrzeżenie: (0%)
-----


Dzieki za odpowiedz. Ale nie jest to chyba to czego szukalem (IMG:style_emoticons/default/sad.gif) Dokladnie chodzi mi o programistyczne wyeliminowanie niechcianych plikow nie ograniczajac sie do modyfikowania plikow konfiguracyjnych.

Nie ma zadnego innego sposobu?
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Cytat(zdandro @ 14.08.2010, 11:03:57 ) *
Jak na razie dziala to w oparciu o sprawdzanie typu MIME poszczegolnych plikow. I TU wasnie tkwi problem - uzytkownik moze zmienic rozszerzenie pliku *.exe na *.txt powiedzmy i pozniej moj klient uruchomi taki plik (...)


Jeśli operujesz na MIME to nie na rozszerzeniach, to dwie różne rzeczy. Do sprawdzenia MIME pliku masz fileinfo.

Ze zdjęciami nie ma problemu, bo możesz je przepuścić przez funkcje generujące grafikę (imagecreate). Z innymi plikami jest problem, bo ktoś może brać nagłówki z właściwych plików, a dopisać resztę z innego, jednak wtedy plik otworzy się w domyślnej aplikacji i raczej ją wywróci czy powstaną krzaki, aniżeli się uruchomi.
Go to the top of the page
+Quote Post
zdandro
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.03.2004

Ostrzeżenie: (0%)
-----


Menedzer w firmie sie uparl sie na sprawdzanie plikow a mowilem mu wczesniej ze - jak napisales wczesniej Vokiel - po zmianie formatu plik bedzie w formie "krzaczkow".

Dzieki za odpowiedzi
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Sprawdzaj MIME po stronie serwera, to najpewniejsze rozwiązanie. Jeśli chodzi o obrazki, to sprawdzaj również, czy nie ma tam przypadkiem ciągu otwierającego blok PHP, gdyż i w ten sposób da się przemycić trojana.

Jeśli używasz PHP starszego niż 5.3 i masz dostęp do poleceń powłoki, wywołaj
Kod
file -bi plik

i w zwróconym wyniku dostaniesz MIME pliku.
Go to the top of the page
+Quote Post
Zyx
post
Post #7





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


Zasadniczo nie ma w 100% skutecznej metody detekcji. Jak komuś zależy, to i w pliku graficzym przemyci kod wykonywalny. Nie wiem czy masz wpływ na rozszerzenia dostępne na serwerze, ale jeśli masz, to zainteresuj się tym rozszerzeniem:

http://docs.php.net/manual/en/book.fileinfo.php

Pozwala ono na "odgadnięcie" typu MIME na podstawie specyficznych, "magicznych" sekwencji bajtów umieszczonych w treści pliku. Jest to heurystyka, ale dość skuteczna i ma tę zaletę, że nie polega na informacji o typie MIME dostarczonej przez przeglądarkę, która może być sfałszowana.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:32