Безопасно ли сохранять загруженные файлы?

0

Я пытаюсь создать простой загрузчик изображений с помощью PHP. Я знаю, как его кодировать, однако у меня есть несколько проблем.

Мой вопрос, который у меня был, заключается в следующем: Сохраняет ли файлы, которые пользователи отправляют безопасно для сохранения в качестве исходного файла? С этим я имею в виду: не будет ли я получать какие-либо уязвимости при сохранении отправки файла пользователем?

Скажем, мой PHP-скрипт делает это: он извлекает данные POST, который включает в себя файл, отправленный человеком на моем веб-сайте. Сохраняется ли просто перенос файла в каталог с оригинальным именем, контентом и т.д.? Есть ли вред в этом, или я должен переименовать эти файлы в случайную строку?

Если это не безопасный способ сделать это, то что? Как я могу проверить, что отправляемый контент не является вредным?

  • 1
    Пух ... есть ли важная причина, чтобы увидеть это самостоятельно? Вы можете просто использовать библиотеку из imagemagick.
  • 0
    @bub Улучшение моего кодирования, больше узнать ... Какой смысл использовать библиотеку, если я до сих пор не знаю ответ на свой вопрос?
Теги:
file
validation
upload
code-injection

4 ответа

1

Всегда есть уязвимости в хранении и предоставлении контента, предоставляемого клиентом.

Это сообщение в блоге дает хорошее описание уязвимостей, с которыми вы можете столкнуться, как они используются и как их защищать. Я предлагаю вам использовать это как ссылку: http://blog.insicdesigns.com/2009/01/secure-file-upload-in-php-web-applications/

  • 1
    Вам лучше применить белый список вместо черного списка.
0

Вот еще один подход: используйте этот (https://hacks.mozilla.org/2011/03/the-shortest-image-uploader-ever/) очень короткий Image Uploader, Пол Руже, на основе API Imgur.com.

Вместо того, чтобы загружать непосредственно в вашу базу данных, пусть imgur сделает всю безопасность и проверку, а затем, если вам нужно, связать или загрузить (безопасное) изображение через Imgur.

Он бесплатный для некоммерческих и очень дешевых для коммерческих.

В принципе, вы можете использовать imgur API для безопасной загрузки изображений со своей HTML-страницы без какого-либо кода на стороне сервера

Вот живая демонстрация: (http://paulrouget.com/miniuploader/)

0

Убедитесь, что вы обрабатываете только файлы с правильным окончанием. Файлы изображений никогда не выполняются веб-сервером, но, например, файлы.php. Поэтому убедитесь, что пользователи не загружают файлы, которые могут быть выполнены.

Мне неизвестны имена файлов, которые являются вредными. Для контента это трудно ответить. Я помню вектор атаки с измененными изображениями TIFF на окнах и один в libjpeg on * nix Systems. Однако вы, вероятно, не сможете найти эти вещи без полного декодирования изображения.

-1

Я бы сказал, что 100% загружаемый файл пользователя не является 100% БЕЗОПАСНЫМ

Файлы JPEG могут содержать произвольные данные в них в дополнение к фактическим данным изображения; это часть спецификации. Таким образом, просто проверка того, является ли изображение допустимым JPEG, не означает, что файл обязательно полностью безопасен.

Загрузка файла без проверки

HTML Form:
<form enctype="multipart/form-data" action="uploader.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> Choose a file to upload: <input name="uploadedfile" type="file" /><br /> <input type="submit" value="Upload File" /> </form>
PHP Code:
<?php
$target_path  =  "uploads/";
$target_path  =  $target_path  .  basename($_FILES['uploadedfile']['name']);
if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file " . basename($_FILES['uploadedfile']['name']) . " has been uploaded";
} else {
echo "There was an error uploading the file, please try again!";
}
?>
  • Определите файл.htaccess, который разрешит доступ только к файлам с разрешенными расширениями.
  • Не помещайте файл.htaccess в тот же каталог, в котором будут сохранены загруженные файлы. Он должен быть помещен в родительский каталог.
  • Типичный.htaccess, который позволяет только gif, jpg, jpeg и png файлы включать следующее (адаптировать его для вашей собственной потребности). Это также предотвратит атаки двойного расширения.

    deny from all <Files ~ "^w+.(gif|jpe?g|png)$"> order deny,allow allow from all </Files>

  • Если возможно, загрузите файлы в каталог за пределами корня сервера. Предотвратите перезапись существующих файлов (чтобы предотвратить перезапись.htaccess).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню