Zadejte hledaný výraz...

Upload souborů – zabezpečení

Ahoj, potřebuju si na web udělat upload souborů. A přemýšlím, jak nejlépe zabezpečit, aby mi uživatelé nepodstrčili jiné soubory, než jsou povolené...
Vím, že metoda $file se dá lehce obejít, dočetl jsem se o metodě getimagesize(). Ale nevím jak jí přesně použít, to se musí nejdříve soubor uploadovat a pak je možno ho teprve kontrolovat?
Jaké je podle vás ideální řešení?
Byl bych vděční i za nějakou ukázku kódu.
Předem díky.
7. 8. 2010 19:51:44
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539913
Rypi
verified
rating uzivatele
(13 hodnocení)
7. 8. 2010 20:12:03
http://php.vrana.cz/ukladani-souboru-od-uzivatele.php
$FILES mime typ je na nic - určije to prohlížeč,
na obrázky je fajn getimagesize - je to ve zdrojáku, vysvětlení je na php.net
a kontrola koncovky souboru je dobrá, pokud chceš uploadovat i jiné soubory než obrázky...
7. 8. 2010 20:12:03
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539912
Honza Šmíd
verified
rating uzivatele
7. 8. 2010 20:12:32
ahoj, asi by to chtelo vedet jaky jazyk pouzivas, ale nejspis php;)
tak asi nejlepsi je soubor nauploadovat do nejakeho tmp adresare a ten pak zkontrolovat a az nasledne s nim pracovat dale. Kontroloval bych podle koncovky a podle mime typu, ale vzdycky se to da nejak obejit, takze bych na to nespolehal, ale pokod chces mit nahrane jen obrazky tak kdyz ti funkce get_image_size() nevyhodi zadnou chybu tak by to mel byt vskutku obrazek. H.
7. 8. 2010 20:12:32
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539911
Díky za reakce.
Jinak je to upload samozřejmě přez php:-)
Budou to nejspíše sobory s koncovkami txt, docx, doc, zip, rar, jpg, png, gif, bmp
Četl jsem toho Vranu. Teoreticky by mělo stačit zakázat skripty v adresáři pomocí engine. Potom i kdyby tam byl php script, nijak by nemohl být spuštěn, nebo se pletu?
7. 8. 2010 20:27:03
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539910
Honza Šmíd
verified
rating uzivatele
7. 8. 2010 21:31:35
tak to zalezi na nastaveni serveru, vetsinou to je nastaveno tak ze se v php prekladaji soubory s koncovkou .php, .php5 a podobne, takze tak by mohlo stacit osetreni aby ten dany nauploadovany soubor nekoncil koncovkou .php
anebo ho nahrat a v .htaccess a tam php skripty uplne zakazat v dane slozce, nebo asi nejlepsi bude pres mod_rewrite nastavit nejake sikovne pravidlo aby se koncovka .php presmerovala treba na index.php?soubor=file.php a tam pak tento soubor projet nejakym escapovanim znaku nez ho zobrazis. Tot muj nazor. H.
7. 8. 2010 21:31:35
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539909
Rypi
verified
rating uzivatele
(13 hodnocení)
8. 8. 2010 09:03:33
přesně, php kód se vykonává jen v souborech, které jsou nastaveny (php, php5, php3...), takže když to tam někdo nahraje jako script.phpx, tak mu to nepůjde spustit.
Jediné, jak by to dokázal spustit, že by si na svých stránkách používal include podle parametru GET, který by nebyl správně oštřený.
např: chci načíst soubor kontakt.php
index.php?soubor=kontakt.php
index.php?soubor=kontakt
Správná možnost je ta druhá, neboť se vždy automaticky přidá koncovka .php a tak se nepovede vložit php kód a následně ho spustit z žádného jiného souboru. Takový include script je například zde: http://pecan.cz/index.php?id=44&n=konec-ramcu-v-cechach
8. 8. 2010 09:03:33
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539908
pokud nemas opravdu velke soubory, tak uploaduj do databaze - jednak nemusis nic zabezpecovat (nic nebezpecneho se ti tam uz z principu spustit nemuze) a druhak bude cela aplikace jednodusseji prenositelna - udelas jeden velkej zazipovanej sql dump, nahrajes na server a mas vystarano, bude to vzdy konzistentni
8. 8. 2010 13:43:56
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539907
hm
verified
rating uzivatele
(20 hodnocení)
8. 8. 2010 21:01:13
Napsal vedouci;550189
pokud nemas opravdu velke soubory, tak uploaduj do databaze - jednak nemusis nic zabezpecovat (nic nebezpecneho se ti tam uz z principu spustit nemuze) a druhak bude cela aplikace jednodusseji prenositelna - udelas jeden velkej zazipovanej sql dump, nahrajes na server a mas vystarano, bude to vzdy konzistentni
to se ovsem skutecne da doporucit jen u tetxovych souboru... pripadne souboru ktere se budou pouzivat jen velmi malo (takze delat tak treba obrazkovou galerii je samozrejme blbost)
8. 8. 2010 21:01:13
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539906
do databáze se mi to dávat nechce, bude to poměrně dost dat, vidím to na zakázaní skriptu v té složce. Každopádně díky za nápady, dávám všem reputaci, moc se to tu nevyužívá a já si cením každého příspěvku ;-)
---------- Příspěvek doplněn 08.08.2010 v 23:36 ----------
Teď mě ještě napadla jedna zajímavá možnost.
if($_FILES == 'image/gif')
{
$typ = '.gif';
}
else
{
$typ = '.jpg';
}
atd... pokud by uživatel podstrčil třeba php, tak by to skončilo jako .jpg
8. 8. 2010 22:33:01
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539905
One
verified
rating uzivatele
9. 8. 2010 00:08:06
a když to bude png? :)
9. 8. 2010 00:08:06
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539904
Napsal AlesiBoss;550401
to se ovsem skutecne da doporucit jen u tetxovych souboru... pripadne souboru ktere se budou pouzivat jen velmi malo (takze delat tak treba obrazkovou galerii je samozrejme blbost)
ja takhle obrazkovou galerii mam - zduvodnis nam, proc je to blbost? :-) myslim, ze vim, kam miris (vykon) - a na to odpovim jako obvykle - cache
9. 8. 2010 02:04:18
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539903
hm
verified
rating uzivatele
(20 hodnocení)
9. 8. 2010 02:12:04
Napsal vedouci;550533
ja takhle obrazkovou galerii mam - zduvodnis nam, proc je to blbost? :-) myslim, ze vim, kam miris (vykon) - a na to odpovim jako obvykle - cache
ano, zatezovat databazi a php necim co lze protahnout cistym apachem je skutecne volovina (a o tunu vetsi kravina kdyz mas databazovy server na jinem stroji nez webovy a zbytecne tak zatezujes vnitrni sit), zvlast kdyz je to vice dat a na to neodpovis ani slovem cache :) protoze porad to budes muset sockovat pres php zatimco cisty obrazek se posle hned a nijak se nezpracovava...
btw preju ti prijemne spravovani velkeho poctu fotek... nejen ze databze takovou tunu dat dost dobre neustoji (ano, je delana na gigabajty dat, ale ne na stovky gigabajtu binarnich dat...) a bude dokonale pomala, ale veskere exporty, presuny, nasledne importy... uf... ja nevim, ale ohanet se vsude tim ze to muzes zacachovat neni zrovna dobrej pristup :)
btw ukladat jakekoliv soubory do databze je na prd :) u malych souboru v malem mnozstvi je to tolerovatelne, ma to svoje vyhody... ale galerie? obzvlaste u vetsich fotografii (male gify jsou taky asi sumak)... ja si vzdycky myslel ze ty budes ten typ programatora co vsechno matla jak ho to zrpovna napadne a nic v okoli neresi, ale ze az tak jsem si zase nemyslel :)
dobre uznavam... kdyz to mas na webu kde se ukaze par lidi za den tak je to uplne jedno :) ale to porad neni argument proc bych nemohl i male projekty delat poradne - co kdyz se z nich necekane stane velky projekt? Ostatne... delal si vubec nekdy neco co muselo ybt udelano na desetitisice, statisice navstev denne? Nejlip s hodne daty jako jsou uzivatelske fotografie apod. ? :) to proste nejde udelat pres databazi (myslim ty soubory)... nikdy :)
9. 8. 2010 02:12:04
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539902
dobre, bavme se rozumne - u fotogalerie s obrovskym objemem fotek to neni dobrej napad, protoze tim ztratis tu vyhodu, co jsem zminoval - konzistence dat - jednim souborem pretahnes vsechno.
u kazde obvykle fotogalerie to nicemu nevadi a naopak to zjednodusuje zalohovani a vsechno.
apachem to protahnout nemuzes - alespon v pripade o kterem se bavim ja (v db jsou puvodni obrazky, script vraci velikost obrazku dle nastaveni (aby to dobre vypadalo v lightboxu - tzn. treba 800x600) a pak samozrejme jsou tu jeste nahledove obrazky (taktez se jejich velikost da nastavit v nastaveni systemu).
php script proleti zakladni routovani, natahne konfiguraci a okamzite vraci obrazek z cache - urcite to neni tak rychle jako primo apache, ale je to hodne rychle a taky posilam rovnou cache-control hlavicku, takze prohlizec si to nejakou dobu necha u sebe -> ve vykonu problem fakt nevidim (za normalnich okolnosti)
EDIT: jo a ty narazky si prosim odpust, nikdy jsi muj zdrojak nevidel :-)
EDIT2: myslim, ze sme se o tom uz jednou bavili - jeden muj system obsluhuje 2000 requestu za vterinu
9. 8. 2010 02:27:56
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539901
Jan Matoušek
verified
rating uzivatele
(12 hodnocení)
10. 8. 2010 21:00:29
Ještě k tomu uploadu, teď mě napadla ještě jedna možnost.
Co kdyby se udělalo tohle:
$pole = explode(".",$_FILES);
$velpole = count($pole)-1 ;
if(substr($pole, 0, 3)=='php' or substr($pole, 0, 3)=='htm' or substr($pole, 0, 3)=='hta')
{
$error = 'Soubor je nepovoleného typu. Tento soubor musí být zabalen.';
}
$nazevsouboru = $nejakapromenna.'.'.$pole;
move_uploaded_file($_FILES, "uploady/$nazevsouboru");
myšlenka je v tom, že pokud by uživatel uploadoval php soubor, ale podstrčil ho jako txt, tak sice podmínkou projde, ale díky, tomu, že jsem zjistil koncovku, tak se uloží jako soubor.txt i kdyby to byl soubor.php
nebo se pletu?:-)
10. 8. 2010 21:00:29
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539900
Rypi
verified
rating uzivatele
(13 hodnocení)
10. 8. 2010 23:29:14
jako že by uživatel zkusil nahrát soubor.php.txt?
a neni to jedno? soubor.php.txt přeci stejně nespustí - chová se stejně jako soubor.txt.
Nebo jsem to pochopil špatně a myslíš to jinak?
10. 8. 2010 23:29:14
https://webtrh.cz/diskuse/upload-souboru-zabezpeceni#reply539899
Pro odpověď se přihlašte.
Přihlásit