[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность загрузки фотографий
Forever
Как еще можно защитить эту страницу?
<?php
date_default_timezone_set('Europe/Moscow');
session_start();
include_once("bd_connect.php"); //подключение к базе данных

if (!isset($_FILES['myfile'])){
echo "Ошибка загрузки";
exit;
}
//проверяем загрузку файла на наличие ошибок
if($_FILES['myfile']['error'] > 0)
{

//в зависимости от номера ошибки выводим соответствующее сообщение
//UPLOAD_MAX_FILE_SIZE - значение установленное в php.ini
//MAX_FILE_SIZE значение указанное в html-форме загрузки файла

switch ($_FILES['myfile']['error'])
{
case 1: echo 'Размер файла превышает допустимое значение UPLOAD_MAX_FILE_SIZE'; break;
case 2: echo 'Размер файла превышает допустимое значение MAX_FILE_SIZE'; break;
case 3: echo 'Не удалось загрузить часть файла'; break;
case 4: echo 'Файл не был загружен'; break;
case 6: echo 'Отсутствует временная папка.'; break;
case 7: echo 'Не удалось записать файл на диск.'; break;
case 8: echo 'PHP-расширение остановило загрузку файла.'; break;
}
exit;
}
else
{
//дата загрузки
$date=date("Y-m-d H:m");
//папка для загрузки
$foto_dir = "/images/";
//новое сгенерированное имя файла (для занесения в БД)
$foto_name = $foto_dir.time()."_photo.jpg";

//Имя файла для загрузки
$upfile = getcwd()."/images/" . time()."_photo.jpg";
}

//создаем массив допустимых форматов файла
$allowed= array
(
'image/png',
'image/jpeg',
'image/jpeg',
'image/jpeg',
'image/gif',
'image/bmp',
'image/vnd.microsoft.icon',
'image/tiff',
'image/tiff',
'image/svg+xml',
'image/svg+xml'
);
//Если формат файла не входит в массив допустимых - шлем
if(!in_array($_FILES['myfile']['type'],$allowed))
{
echo $_FILES ['myfile']['type']."Пошел ты!";
exit;
}

//проверяем не является ли загружаемый файл php скриптом,
//при необходимости можете дописать нужные типы файлов

$blacklist = array(".php", ".phtml", ".php3", ".php4");
foreach ($blacklist as $item)
{
if(preg_match("/$item\$/i", $_FILES['myfile']['name']))
{
echo "Нельзя загружать скрипты.";
exit;
}
}


//Проверка на принадлежность файла к изображению через getimagesize
$imageinfo = getimagesize($_FILES['myfile']['tmp_name']);
if(!in_array($imageinfo['mime'],$allowed))
{
echo $imageinfo['mime']."Пошел ты!";
exit;
}

//считываем содержания файла
$fp = fopen($upfile, 'r');
$contents = fread($fp, filesize ($upfile));
fclose($fp);

//чистим от php и html дескрипторов
$contents = strip_tags($contents);
$fp = fopen($upfile, 'w');
fwrite($fp, $contents);
fclose($fp);



//загружаем файл move_uploaded_file
if (move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile))
{

$q = "INSERT INTO photos (user,date,name) VALUES
('"
.$login."','".$date."','".$foto_name."')";
$query = mysql_query($q);

echo "Выбранный файл загружен.\n";
}
else{
echo "Ошибка загрузки файла.\n";
}

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.