Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 23:06   #1
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
По умолчанию Проверка изображений при загрузке (безопасность) и сама загрузка

Добрый день!
После прочтения парочкм статей про загрузку файлов и со стороны "умного" пользователь послать файл не только картинки, но и php... так вот...ВОПРОСЫ:

1) что за ошибка?
Код HTML:
Warning: move_uploaded_file(uploads/sdfsdf.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in E:\Program files\VertrigoServ\www\love\upload.php on line 16

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Users\Alex\AppData\Local\Temp\php7365.tmp' to 'uploads/sdfsdf.jpg' in E:\Program files\VertrigoServ\www\love\upload.php on line 16
 File uploading failed
.

2) Как лучше защитить "сайт"?

Вот собственно код, стырил на хабре...

PHP код:
<?php

$blacklist 
= array(".php"".phtml"".php3"".php4"".gif"".png"".psd"".js");

foreach (
$blacklist as $item){
    if(
preg_match("/$item\$/i"$_FILES['photo_1']['name'])){
        echo 
"We do not allow uploading PHP files\n";
        exit;
    }
}

$uploaddir 'uploads/';

$uploadfile $uploaddir basename($_FILES['photo_1']['name']);

if(
move_uploaded_file($_FILES['photo_1']['tmp_name'], $uploadfile)){
    echo 
"File is valid, and was successfully uploaded.\n";
}else{
    echo 
"File uploading failed.\n";
}
?>
acteralex вне форума Ответить с цитированием
Старый 07.12.2011, 08:35   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

чтобы проверить является ли ваш файл картинокй - лучше вытаскивать например миме-тип и размеры изображения непосредственно из картинки
Код:
	 $img = getimagesize($name);
ADSoft вне форума Ответить с цитированием
Старый 07.12.2011, 09:03   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Код:
$blacklist = array(".php", ".phtml", ".php3", ".php4", ".gif", ".png", ".psd", ".js");

foreach ($blacklist as $item){
    if(preg_match("/$item\$/i", $_FILES['photo_1']['name'])){
        echo "We do not allow uploading PHP files\n";
        exit;
    }
}
Весьма сомнительная проверка. Меньше верьте примерам на Хабре - там уровень быдлокодеров зашкаливает.

Используйте примерно такой код:
Код:
		// Размер изображения
		$max_image_size = 64*1024;
		if (isset($_FILES["avatarfile"])) {
			if (is_uploaded_file($_FILES['avatarfile']['tmp_name'])) {
				$file = $_FILES['avatarfile']['tmp_name'];
		      if (substr($_FILES['avatarfile']['type'],0,5) == 'image') {
		      	if (filesize($file) <= $max_image_size) {
				 		// Сохраняем файл в каталоге avatars
						$newname=time();
				 		if (move_uploaded_file($file, "images/avatars/".$newname.".gif")) {
							unlink('images/avatars/'.$_SESSION['avatar'].'.gif');
Виталий Желтяков вне форума Ответить с цитированием
Старый 07.12.2011, 20:14   #4
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
По умолчанию

Виталий Желтяков, спасибо большое)))

Форумчане, друзья, кто-нибудь ещё скажет... или все согласны с Виталей?
acteralex вне форума Ответить с цитированием
Старый 07.12.2011, 23:29   #5
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Да-да, мы как на выборах "согласны" )))
К тому же особой проблемы тут я не вижу ... да и других вариантов помимо mime типа не придумаешь.
Единственное, что я когда-то тоже использовал $newname=time(); ... так вот на нагруженной системе случались конфликты, всего пару раз, но было )) Так что теперь генерирую случайную строку и проверяю новое название файла.
Cronos20 вне форума Ответить с цитированием
Старый 08.12.2011, 08:56   #6
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
Да-да, мы как на выборах "согласны" )))
К тому же особой проблемы тут я не вижу ... да и других вариантов помимо mime типа не придумаешь.
Единственное, что я когда-то тоже использовал $newname=time(); ... так вот на нагруженной системе случались конфликты, всего пару раз, но было )) Так что теперь генерирую случайную строку и проверяю новое название файла.
Да, точно. Замените $newname=time();
Виталий Желтяков вне форума Ответить с цитированием
Старый 08.12.2011, 09:28   #7
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

я обычно использую $newname=md5(time().random())
ADSoft вне форума Ответить с цитированием
Старый 08.12.2011, 15:58   #8
PAAG
Пользователь
 
Регистрация: 08.12.2011
Сообщений: 18
По умолчанию

Цитата:
Сообщение от acteralex Посмотреть сообщение
Виталий Желтяков, спасибо большое)))

Форумчане, друзья, кто-нибудь ещё скажет... или все согласны с Виталей?
А чего тут голосовать? Вам дали действующий пример - применяйте.

Цитата:
Сообщение от ADSoft Посмотреть сообщение
я обычно использую $newname=md5(time().random())
Да, я тоже сочетаю время с рандомом, позволяет избежать конфликтов.
PAAG вне форума Ответить с цитированием
Старый 08.12.2011, 16:09   #9
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
По умолчанию

PAAG, имелось ввиду, что может есть ещё какая-то защита, а не голосование!
acteralex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка изображений Axell C# (си шарп) 4 06.06.2011 08:40
статья - Безопасность PHP. Проверка поступивших данных Pblog Обсуждение статей 0 27.02.2011 22:44
Загрузка в Excel html-страниц, ошибки при загрузке и как их побороть Meta2 Microsoft Office Excel 17 12.11.2010 01:50
Ошибка при загрузке изображений... Coder01 Общие вопросы Delphi 4 23.08.2010 23:47
Загрузка изображений Orodret Общие вопросы C/C++ 7 07.07.2009 19:15