Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Sprawdzanie czy obrazek jest obrazkiem czy "niespodzianka"
Forum PHP.pl > Forum > PHP
kiler129
Mam dosc spory problem ze skryptem.
User uploaduje obrazek, skrypt sprawdza czy obrazek ma:

- Dozwolone rozszezenie
- Dozwolony mime
- Nie przekracza 2MB
- Czy funckaj getimagesize() zwroci prawidlowy wynik

Wszytko jest ok ale dodajac do pliku php na poczatku pierwsze kilka KB z obrazka i nadajc rozszeznie .jpg mozna upnac kod php co mi sie bardzo nie podoba dry.gif
Jak przed tym zabezpiecza sie imageshack ktory nie daje sie nabrac ?
Landon
Sposobem będzie na pewno GD lecz dobre tylko gdy będzie mało razy wykonywane smile.gif (przepisanie piksel po pixelu) tongue.gif
kiler129
Cytat(Landon @ 11.05.2008, 23:28:37 ) *
Sposobem będzie na pewno GD lecz dobre tylko gdy będzie mało razy wykonywane smile.gif (przepisanie piksel po pixelu) tongue.gif


Przy kilku obrazkach to i owszem ale nie przy setkach sadsmiley02.gif

edit:

Czesciowo chyba obszedlem problem.
Teraz da sie wgrac taki obrazek ale kod sie nie wykonuje. Dalem w .htaccess:

Kod
AddType text/plain .php .php3 .php4 .php5 .inc .phtml .cgi .pl
RemoveHandler .php


Chcialem wylaczyc php engine w katalogu obrazkow ale niestety wywala mi HTTP500 ;/
Pilsener
Sposób stary jak świat: wczytaj kilka początkowych i ostatnich bajtów pliku i zobacz, co zawiera. Są też pewnie gotowe rozwiązania (w ramach PEAR, GD etc.)
mike
W zupełności wystarczy getimagesize()
kiler129
Cytat(Pilsener @ 12.05.2008, 13:10:47 ) *
Sposób stary jak świat: wczytaj kilka początkowych i ostatnich bajtów pliku i zobacz, co zawiera. Są też pewnie gotowe rozwiązania (w ramach PEAR, GD etc.)


Poczatkowe mozna dac podmienione a koncowe jak niby walidowac?


Cytat(mike @ 12.05.2008, 13:14:43 ) *
W zupełności wystarczy getimagesize()


Ja bla bla bla a ty swoje sciana.gif
Getumagesize wywala mi jakis kosmiczny rozmiar w stylu 535623742345x6745555553235 ale zwraca true i wszytko diabli biora dry.gif
Shili
To sprawdzaj nie true albo false, tylko czy rozmiar jest kosmiczny albo nie. Wiadomo, że zwykły user nie wepchnie obrazka o rozdzielczości większej niż jakaś tam, skoro te z dodatkowym kodem mają dziki rozmiar wystarczy zrobić jeden warunek i voila.
Cezar708
aby obronić się przed wsztrzykniętym kodem PHP (i nie tylko) po prostu pobierz obrazek i poprzez GD przekonwertuj go na jakiś format graficzny (nawet taki sam jakim sam jest) to spowoduje usunięcie wszelkich dodatkowych kodów, które nie są danymi obrazka.

Pozdrawiam
kiler129
Cytat(Cezar708 @ 13.05.2008, 11:37:12 ) *
aby obronić się przed wsztrzykniętym kodem PHP (i nie tylko) po prostu pobierz obrazek i poprzez GD przekonwertuj go na jakiś format graficzny (nawet taki sam jakim sam jest) to spowoduje usunięcie wszelkich dodatkowych kodów, które nie są danymi obrazka.

Pozdrawiam


To jest genialne! Dziekuje smile.gif
Babcia@Stefa
Możesz też sprawdzać klasą:
http://manual.babciastefa.boo.pl/download/...ment.class.phps - Sama klasa
http://manual.babciastefa.boo.pl/download/db.eme - Baza danych klasy
http://manual.babciastefa.boo.pl/download/E.M.E.test.phps - Przykład

Dziękuję, Babcia@Stefa
mrok
a czy nie wystarczy ustawic praw do takiego pliku na 640 questionmark.gif
webdice
Cytat(mrok @ 13.05.2008, 18:52:29 ) *
a czy nie wystarczy ustawic praw do takiego pliku na 640 questionmark.gif


Logicznie rzecz biorąc, jeśli kod zawarty w obrazu będzie "blokowany" przez chmod, to obrazek również.
mrok
Cytat(webdicepl @ 13.05.2008, 18:57:48 ) *
Logicznie rzecz biorąc, jeśli kod zawarty w obrazu będzie "blokowany" przez chmod, to obrazek również.

ale ja blokuję tylko "do wykonania" natomiast czytac może każdy..
i pytanie z mojej strony jest jak najbardziej powazne (choc moze glupie)
b_chmura
Cytat
Wszytko jest ok ale dodajac do pliku php na poczatku pierwsze kilka KB z obrazka i nadajc rozszeznie .jpg mozna upnac kod php co mi sie bardzo nie podoba


Domyślnie kod php w plikach z rozszerzeniem .jpg nie jest wykonywany.
Z jakimkolwiek rozszerzeniem oprócz .php .php3 .php4 .php5, także nie wiem w czym problem.
kiler129
Cytat(b_chmura @ 14.05.2008, 00:33:29 ) *
Domyślnie kod php w plikach z rozszerzeniem .jpg nie jest wykonywany.
Z jakimkolwiek rozszerzeniem oprócz .php .php3 .php4 .php5, także nie wiem w czym problem.


Tak tylko apache chyba po mime patrzy i jakims dzinym trafem uznaje to za plik PHP.
Jak to dziala glebiej nie mam pojecia, najprosciej wylaczyc php w katalogu obrazkow ale niestety nie moge.
b_chmura
Cytat
Tak tylko apache chyba po mime patrzy i jakims dzinym trafem uznaje to za plik PHP.


W takim wypadku przy uploadzie wystarczy najprostsze zabezpieczenie

  1. <?php
  2. if($_FILES[plik][type] == 'type/jpg')
  3. echo 'plik ok';
  4. else
  5. echo 'plik nie ok';
  6. ?>
kiler129
Tak oczywiscie, sprawdzam MIME ale nie wiedziec dlaczego apache przy odowlywnaiu sie do pliku probuje byc madrejszy i wykonuje kod. Jak mowie nie wiem dlaczego ale pomoglo dodanie "RemoveHandler .php"
Mam dostep na serwerze do php.ini - czy jest mozliwsoc pokombinowania w nim i wylaczenia dla konkretnego katalogu engine php ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.