Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Какие есть дыры в этих скриптах загрузки картинок?
 
 автор: volodumir   (30.08.2010 в 16:58)   письмо автору
 
 

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

$blacklist = array(".php", ".phtml", ".php3", ".php4");

foreach ($blacklist as $item) {
if(preg_match("/$item\$/i", $_FILES['photo']['name'])) {
echo "Хакер!!!!!!!";
exit;
}
}

$type = getimagesize($_FILES['photo']['tmp_name']);

$size = $_FILES['photo']['size'];

if ($type[2] == 2&$size < 20971520)
{

$source = $_FILES['photo']['tmp_name'];
$target = 'photo' . $_FILES ['photo']['name'];
$foto = imagecreatefromjpeg ($_FILES['photo']['tmp_name']);
imagejpeg ($foto, "photo.jpg", "100");
imagedestroy ($foto);

}
elseif ($type[2] == 1&$size < 20971520)
{

$source = $_FILES['photo']['tmp_name'];
$target = 'photo' . $_FILES ['photo']['name'];
$foto = imagecreatefromgif ($_FILES['photo']['tmp_name']);
imagejpeg ($foto, "photo.jpg", "100");
imagedestroy ($foto);

}
elseif ($type[2] == 3&$size < 20971520)
{

$source = $_FILES['photo']['tmp_name'];
$target = 'photo' . $_FILES ['photo']['name'];
$foto = imagecreatefrompng ($_FILES['photo']['tmp_name']);
imagejpeg ($foto, "photo.jpg", "100");
imagedestroy ($foto);

}
else
echo "Ваша фотография занимает больше 20 мегабайт, или вы загружаете не JPG, GIF или PNG !!!!!";

?>

[/php]

Я немножко усовершенствовал свой предыдущий скрипт. Меня интересуют уезвимости моего скрипта и методы их решения.
Как заменить проверку на наличие в черном списке

[php]$blacklist = array(".php", ".phtml", ".php3", ".php4");

foreach ($blacklist as $item) {
if(preg_match("/$item\$/i", $_FILES['photo']['name'])) {
echo "Хакер!!!!!!!";
exit;
}
}
[/php]

на белый список. То есть если файл не gif, jpg, png - exit?

  Ответить  
 
 автор: Slo_Nik   (30.08.2010 в 17:30)   письмо автору
 
   для: volodumir   (30.08.2010 в 16:58)
 

>Как заменить проверку на наличие в черном списке
>на белый список. То есть если файл не gif,jpg, png - exit?

<?php
$while_list 
= array('.jpg''.jpeg''.gif');
$ext strtolower(strrchr($_FILES['filename']['name'], "."));
if(!
in_array($ext$while_list)){
 echo 
"Файл должен иметь расширение '.jpg', '.jpeg', '.gif'";
 exit();
}
?>

Это по поводу проверки.
По поводу остального, у Вас небольшая ошибка, не "&" , а "&&". Это пока всё, что могу сказать :)

  Ответить  
 
 автор: sim5   (30.08.2010 в 17:33)   письмо автору
 
   для: Slo_Nik   (30.08.2010 в 17:30)
 

Вы думаете, что этой проверки достаточно?

  Ответить  
 
 автор: Slo_Nik   (30.08.2010 в 17:55)   письмо автору
 
   для: sim5   (30.08.2010 в 17:33)
 

я не думаю так, а Вы наверное не заметили, о чём был вопрос в конце. мой ответ касался только этого вопроса

  Ответить  
 
 автор: sim5   (30.08.2010 в 18:27)   письмо автору
 
   для: Slo_Nik   (30.08.2010 в 17:55)
 

Я читал вопрос, и такой способ проверки типа файла и есть "дыра", для мусора уж точно. А что касается остального, как было, так и осталось....

  Ответить  
 
 автор: Slo_Nik   (30.08.2010 в 19:02)   письмо автору
 
   для: sim5   (30.08.2010 в 18:27)
 

Эта проверка касается только расширения файла, но ни как не относится к проверке типа файла. Вы же прекрасно знаете как можно проверить type файла, у автора вообще я не заметил такой проверки в коде.
Хотя, как я понял, это не надёжная проверка, по type. Провёл не большой эксперемент, в текстовом редакторе, в файл с изображением, вписал код php, заменил расширение файла на php, и вывел этот файл в браузер и код сработал, а при проверке на type мне всё равно показало image/jpg. Да и Вы, в одной из тем, писали, что можно подделать тип файла.

  Ответить  
 
 автор: sim5   (30.08.2010 в 19:08)   письмо автору
 
   для: Slo_Nik   (30.08.2010 в 19:02)
 

Так вы извините, с помощью такой проверки "расширения" как раз и принимают решение "ОК", автор сего в том числе. Смысла проверять расширение в данном случае вообще нет ни какого.

  Ответить  
 
 автор: Slo_Nik   (30.08.2010 в 19:31)   письмо автору
 
   для: sim5   (30.08.2010 в 19:08)
 

>с помощью такой проверки "расширения"
расширение в кавычках что означает? я не правильно выразился?
>как раз и принимают решение "ОК"
и я так делал, до последнего времени, по незнанию. теперь пытаюсь найти решение, но пока безуспешно.
расширение можно заменить, type подменить, так как же всё таки можно с этим бороться? подскажите правильное решение.
Запрет на исполнение + ограничить доступ через .htaccess в/к директории с файлами?Вынести за пределы корня сайта директорию с файлами? Мне кажется этого не достаточно.
Ну действительно, второй день лажу по форумам и сайтам, однозначного ответа или хотя бы приблизительного не нашёл.

  Ответить  
 
 автор: volodumir   (30.08.2010 в 19:49)   письмо автору
 
   для: Slo_Nik   (30.08.2010 в 19:31)
 

sim5 не отвечает на этот вопрос, я вчера у него тоже это спрашивал. Наверно сам не знает!

  Ответить  
 
 автор: sim5   (30.08.2010 в 19:54)   письмо автору
 
   для: volodumir   (30.08.2010 в 19:49)
 

Ответ на этот вопрос есть в тех темах форума (а еще многих других), которые я вам давал (воспользуйтесь поиском). Вы не удосужились прочитать это, так как была структура вашего кода ужасной, таковой она и осталась. Зачем же вам что-то объяснять тогда?

  Ответить  
 
 автор: volodumir   (30.08.2010 в 17:59)   письмо автору
 
   для: sim5   (30.08.2010 в 17:33)
 

Чего еще не хватает?

  Ответить  
 
 автор: volodumir   (30.08.2010 в 18:09)   письмо автору
 
   для: sim5   (30.08.2010 в 17:33)
 

Там не только эта проверка, я еще кодирую все картинки в JPG.

  Ответить  
 
 автор: volodumir   (30.08.2010 в 18:00)   письмо автору
 
   для: Slo_Nik   (30.08.2010 в 17:30)
 

Спасибо!

  Ответить  
 
 автор: bishake   (30.08.2010 в 17:31)   письмо автору
 
   для: volodumir   (30.08.2010 в 16:58)
 

Для начала поменяйте чёрный список на белый ;)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования