Убедитесь, что загруженный .FLA не является вредоносным - PullRequest
2 голосов
/ 20 августа 2011

Я работаю над системой управления проектами на основе PHP, которая позволяет пользователям загружать различные медиа-файлы.Чтобы пользователи не могли загружать вредоносные файлы, система проверяет как MIME-тип (используя finfo_file), так и расширение (используя pathinfo) по белому списку.

Это сработало хорошо, за одним исключением: .FLA (Flash-фильмавторские) файлы.К сожалению, finfo_file не может проанализировать MIME-тип для этих файлов.Вместо этого он возвращает это несколько вводящее в заблуждение сообщение об ошибке:

"Документ CDF V2, поврежден: невозможно прочитать сводную информацию"

(я проверил тест. Используемые мной документы на самом деле не повреждены.)

Очевидно, что проверки только расширения недостаточно, поскольку все, что кому-то нужно, - это дать вредоносному сценарию расширение .FLA, чтобы обойти мои меры безопасности.Что еще я могу сделать, чтобы максимизировать вероятность того, что загруженный файл .FLA безопасен?(Система должна поддерживать загрузку .FLA - не подлежит обсуждению.)

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Можете ли вы ограничить их до CS5 FLA?Потому что это zip-файлы с довольно простым содержимым.Вы можете позвонить по следующему номеру:

<?php 
$za = new ZipArchive(); 

$arr = array();
$za->open('D:\\path\\to\\file.fla'); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $arr[] = $stat['name']; 
} 
?>

Это должно дать вам (как минимум):

mimetype
LIBRARY
META-INF
DOMDocument.xml
metadata.xml
PublishSettings.xml
MobileSettings.xml
SymDepend.cache

Проблема в том, что это работает только для CS5 и не работаетпоследовательно для файлов, созданных в CS3 или 4.

Конечно, вы должны убедиться, что на вашем сервере нет ничего, что может открыть файл Adobe Creative Suite любой формы.и порекомендуйте антивирус своим клиентам.

1 голос
/ 20 августа 2011

Насколько я понимаю, finfo_file просто дает вам mime / type, который можно легко подделать или обмануть, как вы сказали с изменением расширения. Лучший способ справиться с этим - получить настоящее антивирусное решение и установить его на свой сервер. Проблема в том, что вы знаете, когда сканирование завершено или нет. Вы можете легко заставить большинство антивирусных продуктов выполнять сканирование файла, задавая ему правильные параметры командной строки, но реальная проблема заключается в том, чтобы знать, когда сканирование выполнено.

...