2013-09-15 5 views
5

PHP имеет параметр phar.readonly, который по умолчанию должен быть включен и может быть отключен только через файл конфигурации.Почему поддержка phar write в PHP особенно заблокирована?

Этот параметр отключает создание или модификацию архивов Phar с использованием поддержки phar-потока или поддержки записи объекта Phar. Этот параметр всегда должен быть включен на производственных машинах, так как удобная поддержка записи в phar может обеспечить прямое создание вируса на основе php в сочетании с другими распространенными уязвимостями безопасности.

http://php.net/manual/en/phar.configuration.php

Что является причиной блока по умолчанию на поддержку записи в этом контексте?

Есть более общие и доступные способы записи на PHP, что такое «удобство» поддержки записи Phar, что делает ее опасной с точки зрения безопасности?

+1

Вы также можете отключить его через CLI arg: 'php -dphar.readonly = 0 build-phar.php' – scribu

+0

Обратите внимание: если вы просто хотите использовать Phar для создания (неисполняемых) архивов, вы все равно можете использовать [ PharData] (http://php.net/manual/en/class.phardata.php) независимо от значения параметра 'phar.readonly'. – Benjamin

ответ

0

Если вам нужно писать без установки только для чтения, вы можете использовать контейнер ZIP или GZ. См. Head-to-head comparison of Phar, Tar and Zip для получения дополнительной информации.

Наличие PHAR readonly эффективно блокирует его с точки зрения хакеров. Если ваша веб-версия PHP (mod_php, php-cgi или что-то еще) имеет значение по умолчанию, то это очень затрудняет компрометацию приложения на основе Phar, поскольку phar.readonly=1 может быть переопределено во время выполнения.

Существует также преимущество в производительности в том, что файл открыт только R/O, а веб-запросы, которые могут быть внутренне параллельными, могут получить доступ и использовать Phar без блокировки файлов.

Как правило, вы создаете Phar в своей тестовой конфигурации с помощью оболочки CLI, как описано в @scribu, и устанавливайте ее на свой общедоступный веб-сервис, просто скопировав Phar в соответствующий каталог приложений.

+3

Это не совсем ответит на мой вопрос, а именно: почему записи phar считаются более пригодными для использования и как это позволяет создавать вирусы? – Rarst

+0

Я сделал это неявно. Если PHP-скрипт содержит уязвимость, которая позволяет хакеру скомпрометировать выполнение, то он или он может взять управление и перезаписать части приложения, чтобы создать заднюю дверь. Если ваш веб-сайт с PHP имеет «phar.readonly = 1», хакер не может перезаписать код приложения. Такие записи вызывают исключение. 'ini_set()' не работает, так как выполнение не может снизить значение ниже значения PER_SYS. – TerryE

 Смежные вопросы

  • Нет связанных вопросов^_^