Autor | Zpráva | ||
---|---|---|---|
koudelacek Profil * |
#1 · Zasláno: 12. 6. 2012, 19:32:19
Zdravím.
Chci se zeptat - mám sestavený formulář na nahrávání souborů, ale problém s výpisem chyb. Mám povoleny přípony jpg, jpeg, gif, png, doc, docx a pdf. Když se pokusím nahrát soubor 56 MB velký pps, nevypíše to žádnou chybu - ani velký soubor, ani špatná přípona a formulář se navíc celý vymaže.. Když jsem se pokusil nahrát soubor 100 kB .srt ( titulky ), vypsalo to špatná přípona. 1) Chápu to správně, že pokud je soubor větší než 2 MB jak jsem se dočetl, tak se neodešlou žádné data vůbec ? 2) Ale jaktože se mi smazal celý formulář ? 3) Je pro to nějaké řešení, když to mám v mém případě spojené i s normálním formulářem ? 4) Ještě se chci zeptat, jestli je vhodně řešeno zjištění typu souboru, pro případ kdy by se uživatel snažil to obejít přejmenováním souboru apod. Děkuji za opovědi. Pokud mám tedy toto $koncovky = array('jpg', 'jpeg', 'png', 'gif', 'doc', 'docx', 'pdf'); $koncovky2 = array('jpg', 'jpeg', 'png', 'gif'); if(!$_POST['title']) { echo '<p class="error">Nebyl vyplněn titulek...</p>'; } elseif(!$_POST['specialization']) { echo '<p class="error">Nebylo vyplněno.. .</p>'; } elseif(!$_POST['target_group']) { echo '<p class="error">Nebyla vyplněna..</p>';} elseif(!$_POST['description']) { echo '<p class="error">Nebyl vyplněn ...</p>';} .... .... .... .... elseif ($_FILES["attachment"]["error"]) { echo '<p class="error">Soubor se nepodařilo nahrát!</p>\n'; } elseif (!in_array(strtolower(pathinfo($_FILES["attachment"]["name"], PATHINFO_EXTENSION)), $koncovky)) { echo '<p class="error">Koncovka souboru musí být jedna z: ' . implode(", ", $koncovky) . '.</p>\n'; } elseif (in_array(strtolower(pathinfo($_FILES["attachment"]["name"], PATHINFO_EXTENSION)), $koncovky2) && !(@$imagesize = getimagesize($_FILES["attachment"]["tmp_name"])) || @$imagesize[2] > 3 ) { echo '<p class="error">Typ obrázku musí být JPG, JPEG, PNG nebo GIF.</p>\n'; } else {echo 'V pohodě.'; } |
||
ShiraNai7 Profil |
#2 · Zasláno: 12. 6. 2012, 19:37:09
Pokud se odesle vice dat nez je povoleno, tak se skript vubec nespusti. Limit je rizen PHP direktivami
upload_max_filesize a post_max_size (zalezi na tom, ktery je mensi).
|
||
koudelacek Profil * |
#3 · Zasláno: 12. 6. 2012, 19:38:30
Ale tak jak se vyhnu tomu, aby se vymazal celý formulář ?
|
||
ShiraNai7 Profil |
Upozornit uzivatele na konkretni maximalni velikost uploadu :)
|
||
koudelacek Profil * |
#5 · Zasláno: 12. 6. 2012, 19:44:49
Aha, ok :)
A prosimte k tomu 4) Ještě se chci zeptat, jestli je vhodně řešeno zjištění typu souboru, pro případ kdy by se uživatel snažil to obejít přejmenováním souboru apod. mi poradis ? |
||
Keeehi Profil |
#6 · Zasláno: 12. 6. 2012, 19:56:15
koudelacek:
„Ale tak jak se vyhnu tomu, aby se vymazal celý formulář ?“ Nevyhneš. Musel by jsi velikost souboru otestovat už u uživatele což však javascript nezvládne. Řešením by bylo uploadify, které to zjistit umí (nepoužívá JS ale Flash). 4) - snad je to OK |
||
koudelacek Profil * |
#7 · Zasláno: 12. 6. 2012, 20:28:14
Potřeboval bych to vědět jistě, bude to celkem důležité. Mám se ještě poptat ?
|
||
Alphard Profil |
#8 · Zasláno: 12. 6. 2012, 20:52:25
Smazání formuláře lze zabránit paralelním odesíláním souboru (upload selže, ale formulář přežije), existuje hromada uploaderů.
Zjišťování typu je problém, docela spolehlivé je getimagesize() pro obrázky, ale i tam může projít komentář se škodlivým kódem. Zásadní je neumožnit upload souboru pod názvem s koncovkou, kterou by vykonal váš server. |
||
martin1312 Profil |
#9 · Zasláno: 12. 6. 2012, 21:03:16
niekde som videl zakázanie vykonania php cez .htaccess. Do priečinku, kde sa ukladajú uploadované súbory sa hodil ten súbor .htaccess. Neviem ale kde to už bolo, ani čo v tom .htaccess bolo napisane. Stačí googlit :)
|
||
Alphard Profil |
#10 · Zasláno: 12. 6. 2012, 21:13:26
http://stackoverflow.com/questions/1271899/disable-php-in-directory-including-all-sub-directories-with-htaccess
Konkrétně php_flag engine off Ale nemusí to být povolené, takže ověřit. |
||
martin1312 Profil |
#11 · Zasláno: 12. 6. 2012, 21:23:11
Alphard:
presne to |
||
koudelacek Profil * |
#12 · Zasláno: 12. 6. 2012, 21:46:17
Díky :)
|
||
Keeehi Profil |
#13 · Zasláno: 13. 6. 2012, 00:08:40
koudelacek:
„Potřeboval bych to vědět jistě, bude to celkem důležité. Mám se ještě poptat ?“ Kontrolování koncovek oproti whitelistu je výborná metoda zabezpečení. Pokud funkce pathinfo VŽDY vrátí znaky za poslední tečkou, tak je vše v pořádku. Funkci patinfo nepoužívám, takže nemám ověřeno, zda nejde nějak obejít. Pokud je spolehlivá, je vše v pořádku. ( Pokud to běží na Apache, tak je ještě potřeba, aby koncovky jpg, jpeg, png, gif, doc, docx, pdf apache znal. Což by u těchto měl. ) |
||
koudelacek Profil * |
#14 · Zasláno: 13. 6. 2012, 10:54:07
Našel jsem někde, že je dobré používat např. mime_content_type, které je teď nahrazeno funkcí FileInfo() - má s tím někdo zkušenosti ?
|
||
nemeja Profil |
#15 · Zasláno: 13. 6. 2012, 18:00:57
jenze ty koncovku nemas umoznenou. Pridej si ji hned do toho prvniho pole
|
||
Časová prodleva: 12 let
|
0