Я исследователь безопасности, который сталкивался с множеством случаев, когда формы загрузки файлов могут быть использованы, что позволяет серверу интерпретировать управляемый злоумышленником код PHP, что приводит к удаленному выполнению кода. Основная причина этой уязвимости, по-видимому, заключается в устаревшем параметре, который включен по умолчанию в конфигурации Apache следующих дистрибутивов Linux:
и, возможно, другие. Настройка:
AddHandler application/x-httpd-php .php
Эффект этого параметра, который вызывает беспокойство, заключается в том, что он сообщает серверу, что файлы с соответствующими именами \ .php следует интерпретировать как код PHP. Если злоумышленник загружает изображение с именем shell.php.jpg со встроенным в него PHP-кодом и переходом на страницу сервер выполнит сценарий как пользователь сервера.
Мое рекомендуемое решение - отключить этот параметр, закомментировав его. Я считаю, что файлы .php уже имеют встроенный в Apache неявный обработчик, который сообщает серверу интерпретировать код как php, поэтому этот параметр мне кажется избыточным. У меня такое ощущение, что это устаревшая настройка, перенесенная со старых версий CentOS и RedHat, а в новейших версиях этот параметр отсутствует.
У меня вопрос: При каких обстоятельствах отключение этой настройки нарушит функциональность?
Я считаю, что файлы .php уже имеют встроенный в Apache неявный обработчик, который сообщает серверу интерпретировать код как php.
Насколько я знаю, неявного обработчика нет, это AddHandler
команда - это то, что сообщает apache передавать файлы с .php
расширение application/x-httpd-php
обработчик (mod_php)
Однако в целом вы правы. Это (по-видимому) малоизвестная особенность mod_mime
что файлы с несколькими расширениями имеют ВСЕ расширения, проверенные на наличие обработчиков и другой информации. Документация Apache предлагает заменить эту директиву на:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
передавать только файлы, заканчивающиеся на .php
этому обработчику.
Однако лучшим решением было бы хранить ненадежные загруженные пользователем файлы вне DocumentRoot
где браузеры не могут запрашивать script.php.jpg
(или отправьте ссылки по почте http://www.example.com/uploads/thisisreallyyourbank.html
)