Безопасно загружать картинки этими скриптами ?

volodumir

Новичок
Безопасно загружать картинки этими скриптами ?

Первый скрипт - форма загрузки:
PHP:
<form enctype="multipart/form-data" action="upload.php" method="POST">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="1024000">
<input type="file" name="fupload"><br>
<input type="submit" value="Загрузить">
</p>
</form>
Второй скрипт - обработка формы:
PHP:
<?php 

print_r($_FILES ['fupload']['tmp_name']);

if ($_FILES ['fupload']['type'] == "image/jpeg")
{

$source = $_FILES['fupload']['tmp_name'];
$target = 'images' . $_FILES ['fupload']['name'];
move_uploaded_file ($source, $target);
$size = getimagesize ($target);

}
elseif ($_FILES ['fupload']['type'] == "image/gif")
{

$source = $_FILES['fupload']['tmp_name'];
$target = 'im/photo' . $_FILES ['fupload']['name'];
move_uploaded_file ($source, $target);
$size = getimagesize ($target);

}
elseif ($_FILES ['fupload']['type'] == "image/png")
{

$source = $_FILES['fupload']['tmp_name'];
$target = 'images' . $_FILES ['fupload']['name'];
move_uploaded_file ($source, $target);
$size = getimagesize ($target);

}
else
{

unlink($_FILES ['fupload']['tmp_name']);

}
?>
Генерацию имя уникального файла сделаю позже. Меня интересует только безопасность для сайта. Подскажите плиз.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
volodumir
Нас тоже интересует, что ты понимаешь под вышеозначенным термином!
 

volodumir

Новичок
Автор оригинала: c0dex
volodumir
Нас тоже интересует, что ты понимаешь под вышеозначенным термином!
Только на одном из пяти форумов задали этот вопрос! Меня интересует наличие дыр в этом скрипте, как их устранить? Понятно?
 

newARTix

Новичок
volodumir
ну значит это лучший форум из пяти :D

$target = 'images' . $_FILES ['fupload']['name'];
а что если в этой переменной будут спец.символы? Например, "../"? Я конечно не знаю, пропустит ли их PHP, но в любом случае это тонкое место, так как я могу и картинку с расширеннием .php тебе подсунуть.

$_FILES ['fupload']['type'] вообще можно подсунуть какой угодно. И тогда я закачаю тебе на сайт любой нужный мне скрипт. А getimagesize ($target); выдаст Warning, что привлечет мое внимание.

Короче это не код, а сплошная дыра :) НО. Тебя верно спросили насчет твоих представлений о безопасности. Дело в том, что уязвимость этого кода может быть полностью нивелирована, если он используется в определенном окружении (open_basedir + chmod).
 

volodumir

Новичок
Тебя верно спросили насчет твоих представлений о безопасности. Дело в том, что уязвимость этого кода может быть полностью нивелирована, если он используется в определенном окружении (open_basedir + chmod).
Поясните это плиз или дайте ссылку на какой-то блог где написано об этом.
 

newARTix

Новичок
volodumir
не блоги надо читать, а книги и мануалы. Если не терпится наляпать еще ошибок, то можешь про open_basedir у гугла спросить. Там и про chmod будет.
 

Вурдалак

Продвинутый новичок
Нельзя сохранять файл с пользовательским именем, не надо пытаться удалить временный файл, он будет удалён автоматически.

MIME посылается клиентом и, соответственно, не может использоваться в качестве проверки содержимого. Оно, в принципе, и не нужно.
 

Вурдалак

Продвинутый новичок
Просто exif_imagetype()/getimagesize(). Если картинка битая, то это выяснится на стадии создания preview. После самого содержимого картинки может быть что угодно, в том числе PHP-код, но тут важно просто сохранить со своим именем.
 

iceman

говнокодер
да чо вы распинаетесь? ПХП он не знает. код писал не он. иначе бы не задавал таких "общих" вопросов.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Да понятно, что не он. Но все же хочется понять что у него вызывает нарекания)) Если он вообще хоть что-то может написать на php ^_^
 

volodumir

Новичок
Автор оригинала: c0dex
Да понятно, что не он. Но все же хочется понять что у него вызывает нарекания)) Если он вообще хоть что-то может написать на php ^_^
я нигде не обучался, мозгов у меня хватило чтобы найти скрипт и изменить его под себя. Я уже почти написал так свою CMS. У меня есть базовые знания PHP. А ты как я понял слишком умный, но вот посоветовать выход из ситуации не можешь.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
volodumir
для того, чтобы с тобой общаться, надо было бы договориться о терминах, это для начала, ты на вопрос, что для тебя есть "безопасно", так и не ответил)

На недочеты в твоем скрипте тебе указали.

Во-вторых, как ты мог написать методом тыка свою cms я тоже не понимаю.
 

volodumir

Новичок
Автор оригинала: c0dex
volodumir
для того, чтобы с тобой общаться, надо было бы договориться о терминах, это для начала, ты на вопрос, что для тебя есть "безопасно", так и не ответил)
Безопасность сайта

Число пользователей Интернета с каждым днем растет. Но, увы, не все они выходят в Сеть с добрыми намерениями... Что и кто угрожает безопасности Вашего сайта и, говоря шире, Вашей безопасности в Сети?
Хакеры

Хакеры - по-русски это взломщики. Хакеры ищут и находят уязвимости в защищенных компьютерных системах, сетях с целью их взлома для получения ценной информации, хищения денег, использования в своих интересах (например, для рассылки спама), а нередко просто из хулиганских побуждений.
Фишеры

Фишеры (от английского fisher - рыбак) - сравнительно недавно появившаяся разновидность интернет-мошенников, которые обманным путем выманивают у доверчивых пользователей Сети конфиденциальную информацию: различные пароли, пин-коды и т.п. Самый распространенный прием фишеров - рассылка поддельных писем от имени якобы хостинг-провайдеров, работников банков, платежных систем и т.п. с просьбой под каким-то благовидным предлогом (восстановление данных после сбоя, перерегистрация пользователей после хакерской атаки и т.п.) выслать им пароли и коды или пройти перерегистрацию, при которой первым делом запрашивается настоящий пароль (при этом ссылка в письме ведет, естественно, не на сайт компании, от имени которой фишеры рассылают письма, а на сайт фишеров, имеющий домен и дизайн, очень похожие на домен и дизайн настоящего сайта).
Спам

От спама мучается, наверно, каждый, кто хоть как-то связан с Интернетом. Стоит только раз засветить где-нибудь свой почтовый ящик, и через пару недель непрошенные рекламные письма приходится выгребать десятками... С другим видом спама постоянно сталкиваются владельцы сайтов, имеющих хоть какие-то интерактивные средства: форум, блог, гостевую книгу. Рекламные сообщения из них, причем, как правило, совершенно не связанные с обсуждаемой тематикой, а зачастую вообще имеющие противозаконный характер, также приходится вычищать в огромных количествах.

Вирусы

Компьютерные вирусы и Интернет стали в последнее время понятиями неразделимыми. Более 90% компьютерных вирусов (троянов, бэкдоров, червей...) распространяются сейчас именно через Интернет и электронную почту.
И все это вместе...

В последнее время усиливается криминализация Сети. Время малолетних придурков, не способных создать что-то свое, а умеющих только, прочитав на хакерском форуме про очередную обнаруженную уязвимость, тупо воспроизвести придуманный кем-то способ взлома сайта, проходит (хотя, конечно, такие придурки были, есть и будут всегда).

Сейчас явно обозначилась тенденция объединения хакеров, спамеров и вирусописателей в высокопрофессиональные устойчивые преступные группировки, зачастую международные. Трояны, крадущие с Вашего компьютера пароли и другую конфиденциальную информацию, распространяются через спам-рассылки... Спамеры пополняют свои базы e-mail адресов, взламывая базы данных интернет-провайдеров и адресные книги пользователей... Мало какой вирус сейчас обнаружит себя надписью на весь экран "Поздравляю с пятницей, 13!" - скорее он тихо и незаметно превратит Ваш компьютер в спам-машину...

Что вы не поняли?

-~{}~ 30.08.10 11:50:

Автор оригинала: newARTix
volodumir
Там и про chmod будет.
О правах доступа к файлу я знаю, но вот об open_basedir впервые слышу.

-~{}~ 30.08.10 12:05:

Автор оригинала: Вурдалак
Просто exif_imagetype()/getimagesize(). Если картинка битая, то это выяснится на стадии создания preview. После самого содержимого картинки может быть что угодно, в том числе PHP-код, но тут важно просто сохранить со своим именем.
Получается мне нужно проверять на существование getimagesize() картинки, кодировать другой формат в JPEG и сохранять со своим именем. Правильно я вас понял?
 

entonee

Новичок
почти
прочти вот это.. тут по русски и достаточно понятно написано.
http://habrahabr.ru/blogs/php/44610/
 
Сверху