Детальная проверка загружаемого файла
Правда я немного сомневаюсь в одном файле. Скрипт загружает баннер на сервер.
ПОсмотрте пожалуйста может нужно сделать ещё какую проверку или того, что есть сейчас достаточно для защиты?
P.S. Я непрошу проверять код, он работает. ПРосто систему защиты.
Код:
if (isset($_POST['action'])) $action = $_POST['action']; else $action = "";
if ($action == "add") {
#допустимый размер
$max_size = 25 * 1024;
#допустимое расширение
$valid_types = array("gif","jpg", "png", "jpeg", "swf");
if(isset($_FILES["file"]) && is_uploaded_file($_FILES["file"]["tmp_name"]) && $_FILES["file"]["size"]) {
#определяем расширение файла
$ext = substr($_FILES['file']['name'], 1 + strrpos($_FILES['file']['name'], "."));
#проверяем размер
if ($_FILES['file']['tmp_name'] > $max_size) {
$err = 1;
mes_error("Баннер не может быть больше 25 кБт!");
}
#проверяем расширение
elseif (!in_array($ext, $valid_types)) {
$err = 1;
mes_error("Недозволенное расширение файла. Используйте только: .gif, .png, .jpg и swf");
}
else {
#новое имя
$new_file_name = md5(time());
$type_upload = GetImageSize($_FILES["file"]["tmp_name"]);
#определяем графический тип файла для последующего его сохраниения
switch ($type_upload[2]):
case 1: $new_file_name = "$new_file_name.gif";
break;
case 2: $new_file_name = "$new_file_name.jpg";
break;
case 3: $new_file_name = "$new_file_name.png";
break;
case 4: $new_file_name = "$new_file_name.swf";
break;
case 13: $new_file_name = "$new_file_name.swf";
break;
endswitch;
if (move_uploaded_file($_FILES["file"]["tmp_name"], "$http_abs_address/images/temp/$new_file_name")) {
$SourceFilename = "$http_abs_address/images/temp/$new_file_name";
$type = GetImageSize($SourceFilename);
#проверяем файл ли это
if (filetype($SourceFilename) != "file") {
$err = 1;
mes_error("Это не файл!");
}
#определяем тип файла
if (($type[2] != 1)and($type[2] != 2)and($type[2] != 3)and($type[2] != 4)and($type[2] != 13)) {
$err = 1;
mes_error("Выбранный файл имеет неверный формат!");
}
#размер файла
if (filesize($SourceFilename) >= $max_size) {
$err = 1;
mes_error("Файл не может быть больше 25 кБт!");
}
#проверяем ширину графического файла
if ($type[0] != 100) {
$err = 1;
mes_error("Ширина картинки строго 100 пикселей!");
}
#проверяем высоту графического файла
if ($type[1] != 100) {
$err = 1;
mes_error("Высота картинки строго 100 пикселей!");
}
#если ошибок нет (выополняем загрузку файла)
if ($err == 0) {
mes("Баннер загружен");
switch ($type_upload[2]):
case 1:
case 2:
case 3: echo '<img src=/images/'.$new_file_name.' border="0" width="100" height="100">';
break;
case 4:
echo '
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
id="PR"
width="100" height="100"
>
<param name="movie" value="'.$http_address.'/images/'.$new_file_name.'">
<param name="bgcolor" value="#FFFFFF">
<param name="quality" value="high">
<param name="allowscriptaccess" value="samedomain">
<embed
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"
name="PR"
width="100" height="100"
src="'.$http_address.'/images/'.$new_file_name.'"
bgcolor="#FFFFFF"
quality="high"
swliveconnect="true"
allowscriptaccess="samedomain"
>
<noembed>
</noembed>
</embed>
</object>';
break;
case 13:
echo '
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
id="PR"
width="100" height="100"
>
<param name="movie" value="'.$http_address.'/images/'.$new_file_name.'">
<param name="bgcolor" value="#FFFFFF">
<param name="quality" value="high">
<param name="allowscriptaccess" value="samedomain">
<embed
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"
name="PR"
width="100" height="100"
src="'.$http_address.'/images/'.$new_file_name.'"
bgcolor="#FFFFFF"
quality="high"
swliveconnect="true"
allowscriptaccess="samedomain"
>
<noembed>
</noembed>
</embed>
</object>';
break;
endswitch;
#переносим файл с временного раздела в постоянный
rename ("$http_abs_address/images/temp/$new_file_name", "$http_abs_address/images/$new_file_name") or die("Нельзя закачать файл");
}
else {
unlink ("$http_abs_address/images/temp/$new_file_name") or die("Нельзя удалить файл");
}
}
else {
mes_error("Ошибка при перемещении файла!");
}
}
}
else {
mes_error("Файл не загружен");
}
}
if ($action == "add") {
#допустимый размер
$max_size = 25 * 1024;
#допустимое расширение
$valid_types = array("gif","jpg", "png", "jpeg", "swf");
if(isset($_FILES["file"]) && is_uploaded_file($_FILES["file"]["tmp_name"]) && $_FILES["file"]["size"]) {
#определяем расширение файла
$ext = substr($_FILES['file']['name'], 1 + strrpos($_FILES['file']['name'], "."));
#проверяем размер
if ($_FILES['file']['tmp_name'] > $max_size) {
$err = 1;
mes_error("Баннер не может быть больше 25 кБт!");
}
#проверяем расширение
elseif (!in_array($ext, $valid_types)) {
$err = 1;
mes_error("Недозволенное расширение файла. Используйте только: .gif, .png, .jpg и swf");
}
else {
#новое имя
$new_file_name = md5(time());
$type_upload = GetImageSize($_FILES["file"]["tmp_name"]);
#определяем графический тип файла для последующего его сохраниения
switch ($type_upload[2]):
case 1: $new_file_name = "$new_file_name.gif";
break;
case 2: $new_file_name = "$new_file_name.jpg";
break;
case 3: $new_file_name = "$new_file_name.png";
break;
case 4: $new_file_name = "$new_file_name.swf";
break;
case 13: $new_file_name = "$new_file_name.swf";
break;
endswitch;
if (move_uploaded_file($_FILES["file"]["tmp_name"], "$http_abs_address/images/temp/$new_file_name")) {
$SourceFilename = "$http_abs_address/images/temp/$new_file_name";
$type = GetImageSize($SourceFilename);
#проверяем файл ли это
if (filetype($SourceFilename) != "file") {
$err = 1;
mes_error("Это не файл!");
}
#определяем тип файла
if (($type[2] != 1)and($type[2] != 2)and($type[2] != 3)and($type[2] != 4)and($type[2] != 13)) {
$err = 1;
mes_error("Выбранный файл имеет неверный формат!");
}
#размер файла
if (filesize($SourceFilename) >= $max_size) {
$err = 1;
mes_error("Файл не может быть больше 25 кБт!");
}
#проверяем ширину графического файла
if ($type[0] != 100) {
$err = 1;
mes_error("Ширина картинки строго 100 пикселей!");
}
#проверяем высоту графического файла
if ($type[1] != 100) {
$err = 1;
mes_error("Высота картинки строго 100 пикселей!");
}
#если ошибок нет (выополняем загрузку файла)
if ($err == 0) {
mes("Баннер загружен");
switch ($type_upload[2]):
case 1:
case 2:
case 3: echo '<img src=/images/'.$new_file_name.' border="0" width="100" height="100">';
break;
case 4:
echo '
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
id="PR"
width="100" height="100"
>
<param name="movie" value="'.$http_address.'/images/'.$new_file_name.'">
<param name="bgcolor" value="#FFFFFF">
<param name="quality" value="high">
<param name="allowscriptaccess" value="samedomain">
<embed
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"
name="PR"
width="100" height="100"
src="'.$http_address.'/images/'.$new_file_name.'"
bgcolor="#FFFFFF"
quality="high"
swliveconnect="true"
allowscriptaccess="samedomain"
>
<noembed>
</noembed>
</embed>
</object>';
break;
case 13:
echo '
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
id="PR"
width="100" height="100"
>
<param name="movie" value="'.$http_address.'/images/'.$new_file_name.'">
<param name="bgcolor" value="#FFFFFF">
<param name="quality" value="high">
<param name="allowscriptaccess" value="samedomain">
<embed
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"
name="PR"
width="100" height="100"
src="'.$http_address.'/images/'.$new_file_name.'"
bgcolor="#FFFFFF"
quality="high"
swliveconnect="true"
allowscriptaccess="samedomain"
>
<noembed>
</noembed>
</embed>
</object>';
break;
endswitch;
#переносим файл с временного раздела в постоянный
rename ("$http_abs_address/images/temp/$new_file_name", "$http_abs_address/images/$new_file_name") or die("Нельзя закачать файл");
}
else {
unlink ("$http_abs_address/images/temp/$new_file_name") or die("Нельзя удалить файл");
}
}
else {
mes_error("Ошибка при перемещении файла!");
}
}
}
else {
mes_error("Файл не загружен");
}
}
Цитата:
mes_error("Файл не может быть больше [COLOR="Red"]25 кБт[/COLOR]!");
Не припомню чтобы существовало такое сокращение
Цитата: RussianSpy
Не припомню чтобы существовало такое сокращение
Есть такое есть... пытались когда такое стандарт привить.... не прижилось :D типа подчернуть, что это двоичные байты/биты.
http://www.artlebedev.ru/kovodstvo/84/
Код:
if ($_FILES['file']['tmp_name'] > $max_size)
То есть можно залить без ограничения))
P.S. Зачем было давать ссылку на А.Лебедева мне не очень понятно. Мне кажется в подобных случиях лучше ссылаться на ru.wikipedia.org :)
Вообще ужасный код...
Цитата: Snk
Вообще ужасный код...
Давайте не будем говорить загадками и просто флудить. Если говорите, то конкретно пожалуйста.