Загрузка изображений PHP. Как защитить от изображений, содержащих код? - PullRequest
7 голосов
/ 23 мая 2011

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

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

Спасибо!

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

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

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

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

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

0 голосов
/ 23 мая 2011

Вы должны настроить свой веб-сервер так, чтобы расширения файлов изображений не могли интерпретироваться 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.";  
}  
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...