Загрузка изображений PHP. как я могу защитить от изображений, содержащих код?

Из того, что я понимаю, – изображения (jpeg, gif и т. Д.) Могут содержать действительный код php / python / perl и т. Д. Таким образом – любой может создать файл, который будет действительным jpeg, в то же время может быть выполнен с помощью PHP-интерпретатора. (вот описание: ссылка )

Итак – мне было интересно – есть ли способ удалить вредоносный код из изображений? будет перекодировать изображения с помощью GD или imagemagic работы?

Благодаря!

Solutions Collecting From Web of "Загрузка изображений PHP. как я могу защитить от изображений, содержащих код?"

Фактические изображения не будут содержать код. Но ничто не мешает кому-то попытаться загрузить загруженный файл «image», а затем попытаться его запустить.

Ваши интерпретаторы (Perl, PHP, независимо) должны быть настроены так, чтобы они выполняли только определенные типы файлов (например, .php или .php5). Нет никакой причины, по которой Perl или PHP должны обрабатывать файлы изображений.

Просто используйте следующий здравый смысл, чтобы защитить себя:

1) Проверьте тип mime документа
2) Принудительные политики, которые позволяют загружать файлы определенного расширения
3) Не принимайте имена файлов по номинальной стоимости. Создайте собственное внутреннее имя файла и используйте таблицу базы данных, чтобы сохранить сопоставление.
4) Если вы действительно параноик, найдите код, чтобы проверить, что байтовые подписи действительны для данной загрузки типа файла.

Вы должны настроить ваш веб-сервер, чтобы не позволить расширять имена файлов изображений для интерпретации PHP. Как показано на странице, связанной с вопросом, изображения могут содержать код PHP. Всегда проверяйте расширение имени файла на белый список:

<?php $whitelist = '/\.(?:jpe?g|png|gif)$/i'; if (!preg_match($whitelist, $_FILES['userfile']['name'])) { echo "Bad filename extension."; exit; } $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded."; } else { echo "File uploading failed."; } ?>