| 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: 16 let
|
|||
0