Autor | Zpráva | ||
---|---|---|---|
ondraK Profil * |
#1 · Zasláno: 7. 12. 2009, 02:37:37
Dobrý den,
chtěl bych se zeptat,jde nějak v php ošetřit, aby se při načtení souboru a následném uploudování nahrávaly soubory pouze s příponou .txt? a pokud bych vybral jiný třeba .pdf aby to napsalo chybovou hlásku. Předem moc díky. <?php if($_POST['upload']) { $promenna=$_FILES['file']['tmp_name']; if($promenna==*.txt) { echo "ano muzete nahravat"; } else { echo "Ne nemuzete nahravat"; } } ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submint" name="upload"> <form> |
||
MCKAY Profil |
#2 · Zasláno: 7. 12. 2009, 05:54:56
ondraK:
Dole máš v kódu mimo jiné místo input type="submit" submint Co se týče toho výběru určitého typu souboru, bylo by možná lepší to udělat přímo výběrem typu dat ve formuláři a/nebo si ve zpracujícím skriptu pohrát s poli, popřípadě regulárními výrazy, které ti to ošetří. |
||
panther Profil |
#3 · Zasláno: 7. 12. 2009, 07:34:34
ondraK:
kontroluj znaky za poslední tečkou v názvu souboru. Zároveň si vytvoř pole s pří příponami (kdyby jich bylo více). Pak jen tyto dvě věci porovnáš. |
||
Aleš Janda Profil |
#4 · Zasláno: 7. 12. 2009, 09:39:23
panther:
kontroluj znaky za poslední tečkou v názvu souboru. Tak na tohle pozor, šikovný útočník by tam pomocí nulového znaku mohl propašovat příponu jakou chce, což je celkem zrádné. Viz hádanka na http://www.abclinuxu.cz/blog/kybl/2009/9/programatorska-hadanka-3-bezpecnostni-zrada a popis problému na http://www.abclinuxu.cz/blog/kybl/2009/9/reseni-3.-programatorske-hadanky-aneb-jak-napadnout-web Z mnoha důvodů jsou bezpečnější ty regulární výrazy přes celý řetězec, např. if (EReg('^[a-zA-Z0-9]+\.txt$',$promenna)) echo 'Můžeš'; else echo 'Bohužel kužel'; |
||
AM_ Profil |
#5 · Zasláno: 7. 12. 2009, 11:13:44
Aleš Janda:
ereg jsou zastaralé, raději preg_match('/^[a-z0-9]+\.txt$/i',$promenna) |
||
ondraK Profil * |
#6 · Zasláno: 7. 12. 2009, 12:54:23
Zkusil jsem tedy použít neprve ten preg_match a následně ereg jak jste psali, ale bohužel ani v jednom případě to vypsalo že to není txt. Nevíte kde by mohla být chyba?
<?php if(isset($_POST['submit'])) { $promenna=$_FILES['file']['tmp_name']; if (EReg('^[a-zA-Z0-9]+\.txt$',$promenna)) { echo "ano,múžete je to txt"; } else { echo "ne, tohle neni txt"; } } ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" name="submit" value="Upload"> </form> |
||
ondraK Profil * |
#7 · Zasláno: 7. 12. 2009, 12:55:32
Oprava: S txt souborem to píše že to není TXT soubor:-(
|
||
ondraK Profil * |
#8 · Zasláno: 7. 12. 2009, 13:05:04
Když jsem si echem nechal vypsat co je v $promenna tak mi to vypsalo:C:\Windows\Temp\php9388.tmp, v tom asi bude ten háček, nevěděli by jste prosím jak tohle ošetřit?
|
||
Akacko Profil |
#9 · Zasláno: 7. 12. 2009, 15:07:21
ondraK:
Co takhle $promenna=$_FILES['file']['name']; |
||
ondraK Profil * |
#10 · Zasláno: 7. 12. 2009, 15:32:34
Moc díky, tuhl kombinaci jsem zkoušel, ale trošku mi tvralo, než mi to došlo. ještě jednou díky:
|
||
Časová prodleva: 15 let
|
0