Autor Zpráva
PE-X0
Profil *
Ahoj, mám kód pro nahrávání

    function NahraniSouboru()
	
{

        $JmenoSouboru = ($_FILES["soubor"]["name"]);

        $Soubor = ($_FILES["soubor"]["tmp_name"]);
        $Ok = ($_POST["ok"]);

        if ($Ok == "Upload" && $JmenoSouboru!="")

{    

        if (move_uploaded_file($Soubor, "ulozna/$JmenoSouboru")) 

{     

	   /* chmod ("./$JmenoSouboru", 0777);  */  // v případě problémů
	   
	   echo "Soubor <b>$JmenoSouboru</b> byl úspěšně nahrán na server.<BR>";  

}   

	   else      

{     

	   echo "<b>Chyba - soubor nebyl nahrán.</b><BR>";     

}
}

}


ale potřebuji, aby se nesměl nahrávat soubor s jakoukoliv nebezpečnou (pro server) koncovkou.
Tudiž, zamezit: .php, .asp, .html(radši taky) ,.exe, .phtml, .css atd...

nevíte jak to udělat?
mckay
Profil
PE-X0:
Teoreticky by si mohl všechny nahrávané soubory komprimovat nějakou komprimační funkcí, tak, aby se dali stahovat zazipované.
Step
Profil
$_FILES['soubor']['type']
... tam je koncovka souboru

nevim jestli
$_FILES["soubor"]["name"]
obsahuje taky koncovku, kdyžtak by bylo potřeba jí odstranit (napr explode)

potom stačí udělat
$soubor = $_FILES["soubor"]["name"].".".$_FILES["soubor"]["type"];
a soubor se jmenuje jako když byl nahrán (ale je lepší ho nějak přejmenovat kvůli duplicitě)

nakonec bych udělal pole se zakázanými koncovkami
$zakazena = array("php", "asp",...) 
a funkcí
in_array($_FILES["soubor"]["type"], $zakazane);


doufám že to neni blbost, poižívám něco podobného tak jsem to trochu přeformuloval.
PE-X0
Profil *
 function NahraniSouboru()
    
{

        $JmenoSouboru = ($_FILES["soubor"]["name"]);

        $Soubor = $_FILES["soubor"]["name"].".".$_FILES["soubor"]["type"];
        $Ok = ($_POST["ok"]);

        $Zakazene = array("php", "asp" , "xhtml" , "html" , "exe" , "phtml" , "php4" , "php3" , "phps" , "css" , "xhtml" , "js" , "dhtml" , "sql")

        if ($Ok == "Upload" && $JmenoSouboru!="")

{    
        in_array($_FILES["soubor"]["type"], $Zakazane);
        if (move_uploaded_file($Soubor, "ulozna/$JmenoSouboru")) 

{     

       /* chmod ("./$JmenoSouboru", 0777);  */  // v případě problémů
       
       echo "Soubor <b>$JmenoSouboru</b> byl úspěšně nahrán na server.<BR>";  

}   

       else      

{     

       echo "<b>Chyba - soubor nebyl nahrán.</b><BR>";     

}
}

}


nevim jak přesně myslíš to in_array... zatim jsem to sepsal takhle...
PE-X0
Profil *
sorry, špatný kod

function NahraniSouboru()
    
{

        $JmenoSouboru = ($_FILES["soubor"]["name"]);

        $Soubor = $_FILES["soubor"]["name"].".".$_FILES["soubor"]["type"];
        $Ok = ($_POST["ok"]);

        $Zakazene = array("php", "asp" , "xhtml" , "html" , "exe" , "phtml" , "php4" , "php3" , "phps" , "css" , "xhtml" , "js" , "dhtml" , "sql")

        if ($Ok == "Upload" && $JmenoSouboru!="")

{    
        if( in_array($_FILES["soubor"]["type"], $Zakazane))
        echo 'Chyba: Nesprávná přípona';
}
{
        if (move_uploaded_file($Soubor, "ulozna/$JmenoSouboru")) 

{     

       /* chmod ("./$JmenoSouboru", 0777);  */  // v případě problémů
       
       echo "Soubor <b>$JmenoSouboru</b> byl úspěšně nahrán na server.<BR>";  

}   

       else      

{     

       echo "<b>Chyba - soubor nebyl nahrán.</b><BR>";     

}
}

}


takhle jsem to myslel, ale nefunguje
PE-X0
Profil *
Warning: in_array() [function.in-array]: Wrong datatype for second argument in /users/zalohovane/linhart/milankubik.info/Function.php on line 2623
Chyba - soubor nebyl nahrán.

tohle to teď píše...
Step
Profil
radek 10 ...$Zakazene a radek 15 ...$Zakazane :-)

jo a zkus používat edit, bude to potom o něco přehlednější
fajzen
Profil
Step:
vo $_FILES["soubor"]["type"] sa neukladá priamo koncovka súboru, ale mime type súboru (napr. image/gif), okrem toho záleží na prehliadači, či tento mime type pošle a v akej podobe (v staršej Opere som mal problém, že posielala trochu iný text mime typu, takže súbor neprešiel kontrolou...)
koncovku súboru treba vybrať z názvu súboru vo $_FILES["soubor"]["name"]
PE-X0
Profil *
 function NahraniSouboru()	
{
	if ($_POST["ok"] == "Upload"){
        	$zakazene = array("php", "asp" , "xhtml" , "html" , "exe" , "phtml" , "php4" , "php3" , "phps" , "css" , "xhtml" , "js" , "dhtml" , "sql");
		
        	if( in_array(preg_replace("~^.*\.([^.]+)$~", '$1', $_FILES["soubor"]["name"]), $zakazane)){
        		echo 'Nesprávný typ souboru!<br>';

		} else {
			if( !is_writable('./ulozna') ){
				echo "Úložna není zapisovatelná!<br>";

			} else {
				if( move_uploaded_file($_FILES["soubor"]["tmp_name"], "./ulozna/".$_FILES["soubor"]["name"]) ){
					/* chmod ("./$JmenoSouboru", 0777);  */  // v případě problémů
					echo "Soubor <b>".$_FILES["soubor"]["name"]."</b> byl úspěšně nahrán na server.<br>";

				} else {
					echo "<b>Chyba - soubor nebyl nahrán.</b><br>";
				}
			}
		}
	}
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: