Забранени формати.

A

Anonymous

Guest
Добър вечер, колеги! Имам код за качване на игри, в която една част от него е проверката на типа на файловете които се качват. Направил съм (уж) да може да се качват само .swf, .jpg, .jpeg, .bmp форматите, обаче в същото време пробвах, и мога да кача и .php. Ето кодът, вижте къде греша:

PHP:
<?php
include 'inc/config.php';
if($_POST['submit'])
{
$title = htmlspecialchars($_POST['title']);
$desc = htmlspecialchars($_POST['desc']);
$file=$_FILES['kartinka']['name'];//име на файла
$tmp_file=$_FILES['kartinka']['tmp_name'];//пътя до временното място на файла
$size=$_FILES['kartinka']['size'];//големина на файла

$file1=$_FILES['game']['name'];//име на файла
$tmp_file1=$_FILES['game']['tmp_name'];//пътя до временното място на файла
$size1=$_FILES['game']['size'];//големина на файла
$upload_path1="games/".basename($file1);//Път до качения файл

$upload_path="games/".basename($file);//Път до качения файл
$site_url="http://xxxxxxxx/";
$upload=move_uploaded_file($tmp_file,$upload_path);
$upload=move_uploaded_file($tmp_file1,$upload_path1);

$date=time();

if($title == NULL || $desc == NULL)
{
echo "Моля въведете описание и заглавие";
}
else
{
if($_FILES["kartinka"]["size"] == 0 || $_FILES['game'] ["size"] == 0)
{
echo 'Моля качете играта и картинката!';
exit();
}
else
{ 
if(preg_match('/\\.(png|jpg|bmp|jpeg)$/i', $_FILES['kartinka']['name']) || 
preg_match('/\\.(swf)$/i', $_FILES['game'] ['name']))
{
$putq = 'games/'.basename($_FILES['kartinka']['tmp_name'] && $_FILES['game']['tmp_name']);
if($upload)
{
mysql_query("INSERT INTO `games` (ime,game,control,image,dobavil,date,accepted) VALUES 
('$title' , '$upload_path1' , '$desc' , '$upload_path' , '$_SESSION[username]', '$date', 'no')");
echo "<div class=\"usp\">Играта е успешно качена. След преглед от екипа, ще бъде приета/отхвърлена.</div>";
}
else 
{
echo "<div class=\"err\">Файла не беше качен!</div><br />";
}
}
else 
{
echo "<div class=\"err\">Неможете да качвате такъв тип файл.</div>";
}
} 
}
}
?>
 

somebody

Registered
Регулярните изрази не са добро решение за да провериш типа на файл.Нищо не ми пречи да преименовам примерно .exe файл на .jpg и пак да мине проверката.Чрез $_FILES['kartinka']['type'] и $_FILES['game']['type'] проверката на типа на файла би била по реална макар, че тази информация идва от браузъра, а информацията от него също би могла да се манипулира.

Ето един начин като за начинаещ -> http://www.w3schools.com/php/php_file_upload.asp
 

Горе