Strict Standards: Resource ID#27 used as offset, casting to integer (27) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#29 used as offset, casting to integer (29) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#30 used as offset, casting to integer (30) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Загрузка фото на сайт
ТвойWeb » WebMaster класс » PHP/Perl » Загрузка фото на сайт

Страниц (1): [1]
 

1. Furax - 26 Января, 2008 - 07:57:46 - перейти к сообщению
Доброго времени суток!

Написал скрипт загрузки фотографии на сервер, и, поскольку начитался всяких ужасов, хочу спросить: безопасен ли он или я оставил какие-либо очевидные (или не очень) дыры?

Переменная $maxSize и класс DataException определены ранее, а move_uploaded_file() идёт сразу после приведённого фрагмента. Достаточны ли эти проверки?

CODE:
if ($_FILES['foto']['error']) //Ошибка при загрузке
throw new DataException('UploadError');

if ($_FILES['foto']['size'] > $maxSize) //Слишком большой размер фотографии
throw new DataException('BigFotoSize', $_FILES['foto']['size'], $maxSize);

//Определяем тип фото и его допустимость
$fileName = strtolower($_FILES['foto']['name']); //Имя временного файла
$dotPosition = strrpos($fileName, '.'); //Позиция точки в имени
if ($dotPosition === FALSE) //Если точки нет - нет расширения, ошибка типа
throw new DataException('WrongFotoType');
$extension = substr($fileName, $dotPosition+1); //Расширения

$types = array('jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png'); //Расширения и соответствующие MIME-типы
if (! (isSet($types[$extension]) && ($types[$extension] == $_FILES['foto']['type']))) //Если тип неверный
throw new DataException('WrongFotoType');

2. awep - 27 Января, 2008 - 09:27:22 - перейти к сообщению
CODE:
if (! (isSet($types[$extension]) && ($types[$extension] == $_FILES['foto']['type']))) //Если тип неверный
замени на
CODE:
if (! (isSet($types[$extension]) && ($types[$extension] != $_FILES['foto']['type']))) //Если тип неверный
а то работать не будет.
а защита вроде бы нормальная.
только вот все равно могут быть ошибки - юзер может загрузить любой файл с допущенным расширением. при обработке его как изображения будут ошибки
3. Furax - 28 Января, 2008 - 02:35:46 - перейти к сообщению
awep
Нет, как раз должно быть '==', т. к. '!' стоит общий.

Что ж, спасибо за комментарий!
4. awep - 28 Января, 2008 - 08:45:57 - перейти к сообщению
сорри не заметил. просто сам никогда так не пишу, вот и пропустил

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0367]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33