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

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

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

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Загрузка фото на сайт
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


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

> Описание: И все необходимые проверки
Furax
Отправлено: 26 Января, 2008 - 07:57:46
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Доброго времени суток!

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

Переменная $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');

 
 Top
awep
Отправлено: 27 Января, 2008 - 09:27:22
Post Id



Наш человек


Покинул форум
Сообщений всего: 304
Дата рег-ции: Дек. 2005  
Откуда: Казань

Карма 6




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



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




awep
Нет, как раз должно быть '==', т. к. '!' стоит общий.

Что ж, спасибо за комментарий!
 
 Top
awep
Отправлено: 28 Января, 2008 - 08:45:57
Post Id



Наш человек


Покинул форум
Сообщений всего: 304
Дата рег-ции: Дек. 2005  
Откуда: Казань

Карма 6




сорри не заметил. просто сам никогда так не пишу, вот и пропустил
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


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

[Script Execution time: 0.0375]     [ 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