volodumir
Новичок
Какие есть дыры в этих скриптах загрузки картинок?
Первый скрипт:
Второй скрипт:
Я немножко усовершенствовал свой предыдущий скрипт. Меня интересуют уезвимости моего скрипта и методы их решения.
Как заменить проверку на наличие в черном списке
на белый список. То есть если файл не gif, jpg, png - то exit?
Первый скрипт:
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>
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:
$blacklist = array(".php", ".phtml", ".php3", ".php4");
foreach ($blacklist as $item) {
if(preg_match("/$item\$/i", $_FILES['photo']['name'])) {
echo "Хакер!!!!!!!";
exit;
}
}