Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] bezpieczny upload PDF, DOC i DOCX, na serwerze nie działa funkcja mime_content_type()
grudziu
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006
Skąd: Gdansk

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


Witam,

zapytanie: jak stworzyć bezpieczny upload dla internautów plików (tylko dokumenty) na serwer?

Chciałem to zrobić poprzez sprawdzenie rozszerzenia po kropce (czyli .pdf, .doc, .docx) , dalej po stronie przeglądarki ale niestety chyba Firefox pdf rozpoznaje jako application/ms-download czyli tak samo jak exe, a więc już po stronie przeglądarki nie ma co sprawdzać... w związku z tym chciałem oprzeć wszystko na sprawdzeniu typu MIME po stronie serwer'a, ale niestety funkcja mime_content_type() jest nieobsługiwana - i nie będzie... - przez serwer na którym wgram skrypt uploadu.

Zaczerpnięte z php.net
  1. <?php
  2. if (!function_exists('mime_content_type ')) {
  3. function mime_content_type($filename) {
  4. $finfo = finfo_open(FILEINFO_MIME);
  5. $mimetype = finfo_file($finfo, $filename);
  6. finfo_close($finfo);
  7. return $mimetype;
  8. }
  9. }
  10. ?>

Ten fragment również nie działa.


Jakieś pomysły?


--------------------
Inteligentny dom inteligentny dom tanio
Inteligentny budynek Automatyka budynkowa
LONworks KNX KNX
sklep KNX sklep eib
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Jesli chcesz sprawdzac po kropce to explode() a jak naglowki to ja mam tak:
  1. <?php
  2. $uploaded_file = $_FILES['up_file']['tmp_name'];
  3. $roz = $_FILES['up_file']['type'];
  4. $extension = array('image/jpg', 'image/jpeg', 'image/gif', 'image/png');
  5. $info=getimagesize($uploaded_file);
  6. $typ=$info['mime'];
  7. $szerokosc=$info[0]; 
  8. $wysokosc=$info[1];
  9. $width = 130;
  10. $height = 130;
  11. $quality = 75;
  12.  
  13. if(@is_uploaded_file($uploaded_file)) {
  14.  
  15.  if(in_array($roz, $extension)) {
  16.  
  17. //etc....
  18. ?>


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
grudziu
post
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006
Skąd: Gdansk

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


Tylko że getimagesize odnosi się do obrazków, ja mam PDF, DOC i DOCX...


--------------------
Inteligentny dom inteligentny dom tanio
Inteligentny budynek Automatyka budynkowa
LONworks KNX KNX
sklep KNX sklep eib
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Ah no fakt zapomnialo mi sie no to pozostaje ci explode() albo klasa @Cysiaczek
http://forum.php.pl/index.php?showtopic=80...t=0&start=0

P.S
  1. <?php
  2. $roz = $_FILES['up_file']['type'];
  3. ?>

Tu masz typ uploadowanego pliku wiec wystarczy ze zmienisz naglowki na twoje i kod bedzie dzialal


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
legorek
post
Post #5





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Odnośnie:

$_FILES['costam']['type'];

to manual jasno mówi, że nie wolno temu ufać. Sprawdzanie rozszerzenie jest jeszcze gorszym sposobem.
Jeśli możesz użyj funkcji: finfo_file" title="Zobacz w manualu PHP" target="_manual

Jeśli nie, zobacz sobie komentarze do mime_content_type" title="Zobacz w manualu PHP" target="_manual tam znajdziesz kilka lepszych lub gorszych sposobów.

Lub zajrzyj tutaj

Prawa jest taka, że nigdy nie będziesz miał pewności, bo plik może mieć sfałszowany/uszkodzony nagłówek.


--------------------
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Chyba wiadomo ze mozna spoofowac naglowki za pomoca live http headers ale praktycznie nigdy nie dziala np u mnie nie smile.gif

EDIT:
Zreszta w linku ktory podalem jest podane najlepsze rozwiazanie na ten problem dodatkowo jak chcesz mzoe sprawdzac naglowki ale po co?
ALbo jedno albo drugie

Ten post edytował marcio 9.06.2008, 12:46:17


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
grudziu
post
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006
Skąd: Gdansk

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


Cytat(legorek @ 9.06.2008, 12:42:57 ) *
Odnośnie:

$_FILES['costam']['type'];

to manual jasno mówi, że nie wolno temu ufać. Sprawdzanie rozszerzenie jest jeszcze gorszym sposobem.
Jeśli możesz użyj funkcji: finfo_file" title="Zobacz w manualu PHP" target="_manual

Jeśli nie, zobacz sobie komentarze do mime_content_type" title="Zobacz w manualu PHP" target="_manual tam znajdziesz kilka lepszych lub gorszych sposobów.

Lub zajrzyj tutaj

Prawa jest taka, że nigdy nie będziesz miał pewności, bo plik może mieć sfałszowany/uszkodzony nagłówek.


mime_content_type i komentarze - przeczytałem, nie działa u mnie na serwerze tak jak finfo_file - również nie działa

Dzięki za link google, może coś w tym gąszczu uda się znaleźć.


--------------------
Inteligentny dom inteligentny dom tanio
Inteligentny budynek Automatyka budynkowa
LONworks KNX KNX
sklep KNX sklep eib
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie rozumiem co masz szukac podalem ci wyzej temat z rozwiazaniem wystarczy dac odpowiednie rozszerzenia i hula.....


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
grudziu
post
Post #9





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006
Skąd: Gdansk

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


Cytat(marcio @ 9.06.2008, 15:06:47 ) *
Nie rozumiem co masz szukac podalem ci wyzej temat z rozwiazaniem wystarczy dac odpowiednie rozszerzenia i hula.....


$_FILES [type] - ja wiem że to hula i ten sposób znałem ale to nie jest ani bezpieczne dodatkowo uzależnione od przeglądarki, a chociażby firefox sprawdza pdf'a jako application/ms-download i jest analogiczne z aplikacją exe.

W linku który podałeś z tego co ja rzuciłem okiem i poświęciłem dwie minuty to ktoś sie bawi w obiekty przy sprawdzaniu typu samego rozszerzenia (czyli po kropce co jest napisane, a nie typ pliku) biggrin.gif mozna i tak ale to mi się nie podoba.

dzięki za odpowiedzi


--------------------
Inteligentny dom inteligentny dom tanio
Inteligentny budynek Automatyka budynkowa
LONworks KNX KNX
sklep KNX sklep eib
Go to the top of the page
+Quote Post
mike
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~grudziu tak czytam ten wątek i dochodzę do wniosku że powinieneś już wszystkie wiedzieć połowę postów temu.
Sprawa jest prosta, masz dwa wyjścia.
1. Korzystasz z narzędzi naprawdę sprawdzających typ pliku: MIME types, etc;
2. Sprawdzasz rozszerzenie.

Nie ma alternatywy bo nie wiem czy wiesz ale przeglądarki wysyłają MIME na podstawie rozszerzenia więc na jedno wychodzi.
Go to the top of the page
+Quote Post
grudziu
post
Post #11





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 25.09.2006
Skąd: Gdansk

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


A jednak udało mi się znaleźć (własciwie to wymęczyłem to od supportu home.pl któremu dziękuję) rozwiązanie:

system("file -i $plik");


--------------------
Inteligentny dom inteligentny dom tanio
Inteligentny budynek Automatyka budynkowa
LONworks KNX KNX
sklep KNX sklep eib
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:47