|
|
|
| Первый скрипт:
[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? | |
|
|
|
|
|
|
|
для: 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();
}
?>
|
Это по поводу проверки.
По поводу остального, у Вас небольшая ошибка, не "&" , а "&&". Это пока всё, что могу сказать :) | |
|
|
|
|
|
|
|
для: Slo_Nik
(30.08.2010 в 17:30)
| | Вы думаете, что этой проверки достаточно? | |
|
|
|
|
|
|
|
для: sim5
(30.08.2010 в 17:33)
| | я не думаю так, а Вы наверное не заметили, о чём был вопрос в конце. мой ответ касался только этого вопроса | |
|
|
|
|
|
|
|
для: Slo_Nik
(30.08.2010 в 17:55)
| | Я читал вопрос, и такой способ проверки типа файла и есть "дыра", для мусора уж точно. А что касается остального, как было, так и осталось.... | |
|
|
|
|
|
|
|
для: sim5
(30.08.2010 в 18:27)
| | Эта проверка касается только расширения файла, но ни как не относится к проверке типа файла. Вы же прекрасно знаете как можно проверить type файла, у автора вообще я не заметил такой проверки в коде.
Хотя, как я понял, это не надёжная проверка, по type. Провёл не большой эксперемент, в текстовом редакторе, в файл с изображением, вписал код php, заменил расширение файла на php, и вывел этот файл в браузер и код сработал, а при проверке на type мне всё равно показало image/jpg. Да и Вы, в одной из тем, писали, что можно подделать тип файла. | |
|
|
|
|
|
|
|
для: Slo_Nik
(30.08.2010 в 19:02)
| | Так вы извините, с помощью такой проверки "расширения" как раз и принимают решение "ОК", автор сего в том числе. Смысла проверять расширение в данном случае вообще нет ни какого. | |
|
|
|
|
|
|
|
для: sim5
(30.08.2010 в 19:08)
| | >с помощью такой проверки "расширения"
расширение в кавычках что означает? я не правильно выразился?
>как раз и принимают решение "ОК"
и я так делал, до последнего времени, по незнанию. теперь пытаюсь найти решение, но пока безуспешно.
расширение можно заменить, type подменить, так как же всё таки можно с этим бороться? подскажите правильное решение.
Запрет на исполнение + ограничить доступ через .htaccess в/к директории с файлами?Вынести за пределы корня сайта директорию с файлами? Мне кажется этого не достаточно.
Ну действительно, второй день лажу по форумам и сайтам, однозначного ответа или хотя бы приблизительного не нашёл. | |
|
|
|
|
|
|
|
для: Slo_Nik
(30.08.2010 в 19:31)
| | sim5 не отвечает на этот вопрос, я вчера у него тоже это спрашивал. Наверно сам не знает! | |
|
|
|
|
|
|
|
для: volodumir
(30.08.2010 в 19:49)
| | Ответ на этот вопрос есть в тех темах форума (а еще многих других), которые я вам давал (воспользуйтесь поиском). Вы не удосужились прочитать это, так как была структура вашего кода ужасной, таковой она и осталась. Зачем же вам что-то объяснять тогда? | |
|
|
|
|
|
|
|
для: sim5
(30.08.2010 в 17:33)
| | Чего еще не хватает? | |
|
|
|
|
|
|
|
для: sim5
(30.08.2010 в 17:33)
| | Там не только эта проверка, я еще кодирую все картинки в JPG. | |
|
|
|
|
|
|
|
для: Slo_Nik
(30.08.2010 в 17:30)
| | Спасибо! | |
|
|
|
|
|
|
|
для: volodumir
(30.08.2010 в 16:58)
| | Для начала поменяйте чёрный список на белый ;) | |
|
|
|