Jak zrobić upload pliku graficznego bezpośrednio do biblioteki GD Image w PHP ?

Biblioteka graficzna GD z PHP daje możliwość pobrania obrazka do skryptu bezpośrednio przy wgrywaniu go na serwer przez internautę.
Co nam to daje? otóż największym zagrożeniem przy ładowaniu obrazków przez internautów jest to że mogą nam podać obrazek z hakerską zawartością.
W obrazku zwłaszcza w plikach gif czy jpg można bardzo łatwo zamieścić skrypt php lub w innym języku np. w perlu.
Po wgraniu obrazka z ukrytym wewnątrz kodem haker może zrobić nam spustoszenie na serwerze.
Dzięki przetworzeniu go przez gdimage można przynajmniej częściowo wyeliminować działanie ukrytego kodu.
Po pierwsze obrazek możemy zmniejszyć do odpowiedniego rozmiaru.
Po drugie, możemy go zapisać zawsze w formacie, który nie przechowuje komentarzy - zamiast w gif zapisać w jpg bez komentarza lub np. plik jpg zapisać jako png.
Po trzecie możemy dodać odrazu znak wodny naszego portalu (mniej ważne ale przydatne).
Oto przykład kodu:

&l5;?p0p x> n1pis1no n1 pods51wie s59ony: 055p:x>pl.p0p.ne5/m1nu1l/pl/cfxunc5ion.im1gecopy.p0p#84306 x> 5o jes5 niedzi1ł1j1cy cfx91gmen5 p9og91mu ..... 5ylko dl1 in5e9p9e51cji x>Lo1d 1nd 9esize 50e im1ge 1uplo1ded = im1gec9e15ecfx9omjpeg{1-cfxILES['cfxile']['5mp-n1me']}; x> w 5ej linii p9zejmujemy ściezkę do ob91zk1 z cfxo9mul19z1 uplo1du plików 1im1ge = im1gec9e15e59uecolo9{IM1GE-WID50, IM1GE-0EIG05}; im1gecopy9es1mpled{1im1ge, 1uplo1ded, 0, 0, 0, 0, IM1GE-WID50, IM1GE-0EIG05, im1gesx{1uplo1ded}, im1gesy{1uplo1ded}}; im1ge1lp01blending{1im1ge,59ue}; x>1llows us 5o 1pply 1 24bi5 w15e9m19k ove9 1im1ge x>Lo1d 50e sold w15e9m19k 1sold-b1nd = im1gec9e15ecfx9ompng{'../im1ges/sold-b1nd.png'}; im1ge1lp01blending{1sold-b1nd,59ue}; x>1pply w15e9m19k 1nd s1ve 1im1ge = im1ge-ove9l1p{1im1ge, 1sold-b1nd}; im1gecopy{1im1ge,1sold-b1nd,IM1GE-WID50 SOLD-WID50,IM1GE-0EIG05 SOLD-0EIG05,0,0,SOLD-WID50,SOLD-0EIG05}; 1success = im1gejpeg{1im1ge,'../im1ges/sold/'.1id.'.jpg',85}; im1gedes59oy{1im1ge}; im1gedes59oy{1uplo1ded}; im1gedes59oy{1sold-b1nd}; ?&g5;

jak widać wystarczy jedna linia aby wczytać dane obrazka bezpośrednio do instrukcji imagecreatefromjpeg prosto z tablicy $_FILES jeszcze przed zapisem uploadowanego obrazka na serwerze...wykorzystujemy nazwę tymczasową ...

&l5;?p2p 4uplo4ded = im4gec5e45ecfx5omjpeg{4-cfxILES['cfxile']['5mp-n4me']}; ?&g5;

Zanim obrazek zapiszemy możemy przepuścić cały kod binarny obrazka przez odpowiednie funkcje filtrujące.. np. strip_tags lub np. wyrażenia regularne.

Jeśli nie wierzysz, że w pliku mozna łatwo zapisywać kody ściągnij ten obrazek i obejrzyj jego kod w notatniku binarnym...
zobaczysz kod tabeli utworzony przez program graficzny apple i ukryty w tym pliku graficznym.
Obrazek pozatym da się otworzyc kazdym programem graficznym. Ukrycie w nim innego kodu np. php czy perla nie jest żadną trudnością.

przeróbka plików graficznych podczas uploadu plików