@rinaz22

Безопасен ли этот код для загрузки картинок на сайт?

Всем привет! В интернете нашел код для проверки загружаемого файла. Но сомневаюсь. Данный код действительно защитит от загрузки лишнего(вирусов, шелов и т.п.)?
<?php
  $blacklist = array(".php", ".phtml", ".php3", ".php4", ".html", ".htm");
  foreach ($blacklist as $item)
    if(preg_match("/$item\$/i", $_FILES['somename']['name'])) exit;
  $type = $_FILES['somename']['type'];
  $size = $_FILES['somename']['size'];
  if (($type != "image/jpg") && ($type != "image/jpeg")) exit;
  if ($size > 102400) exit;
  $uploadfile = "images/".$_FILES['somename']['name'];
  move_uploaded_file($_FILES['somename']['tmp_name'], $uploadfile);
?>
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
flapflapjack
@flapflapjack
на треть я прав
Может тогда проще

$whitelist = array(".jpg", ".jpeg", ".png"); //и так далее...
  foreach ($whitelist as $item)
    if(!preg_match("/$item\$/i", $_FILES['somename']['name'])) exit;


Ваш код всё равно не пропустит истинный png, gif, у них $_FILES['somename']['name'] будет другой.

Кроме того $_FILES['somename']['name'] можно отправить через header вообще любой - не важно какой у файла.

Настоящую картинку можно проверить только с помощью getimagesize(), но и расширения проверять необходимо, потому как если по mime-типу картинка будет картинкой, и у неё будет всё что нужно иметь картинке, а в EXIF'e будет PHP код, то он выполнится. С ошибками, но выполнится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ну первое что приходит в голову, это конечно же проверка на getImageSize
Второе , как я реализовал в своей библиотеке, это не обработка по расширению, а обработка байтов картинки, то есть получить ресурс из файла. Если это не картинка, оно сразу поломается
https://github.com/Compolomus/Compomage
Если кому интересно, присоединяйтесь
php.net/manual/ru/function.imagecreatefromstring.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы