Оптимизация безопасности и производительности PHP: Почему отключение $_ENV может быть правильным решением

Когда дело доходит до настройки PHP для веб-приложений, один из аспектов, который может ускользнуть от внимания, — это глобальные переменные, такие как $_ENV. Хотя они могут представляться несущественными, настройка этих переменных может оказать заметное влияние на безопасность и производительность вашего приложения. В этой статье мы рассмотрим причины, по которым решение об отключении $_ENV может быть для вас оптимальным.

Что такое $_ENV и как она настраивается?

$_ENV — это одна из предопределенных глобальных переменных в PHP, которая содержит переменные окружения. Эти переменные могут включать в себя информацию о сервере, пути к файлам, ключи API и другую конфиденциальную информацию.

Повышение безопасности

Предотвращение информационного раскрытия: Одним из основных рисков, связанных с включенным $_ENV, является потенциальное раскрытие важных данных. Если злоумышленники получат доступ к вашему приложению или если ваш код случайно выводит содержимое $_ENV, это может привести к утечке конфиденциальной информации.

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

Улучшение производительности

Оптимизация использования памяти: Любая глобальная переменная занимает некоторое количество памяти. Отключение $_ENV может немного снизить потребление памяти, особенно на серверах с ограниченными ресурсами.

Быстрое время инициализации: Каждый раз при запуске PHP-скрипта система должна инициализировать и наполнять глобальные переменные данными. Отключение ненужных переменных может сократить это время.

Что делать, если вам нужен доступ к переменным окружения?
Если вам все-таки требуется доступ к переменным окружения, не стоит расстраиваться. Функция getenv() предоставляет доступ к этой информации без необходимости включения $_ENV.

Настройка PHP-окружения — это не только о выборе версий и модулей, но и о тонкой настройке для обеспечения безопасности и производительности. Рассмотрите возможность отключения $_ENV и других глобальных переменных в вашем конкретном контексте, чтобы создать надежное и быстродействующее веб-приложение.

php.ini: настройка директивы variables_order

Если в variables_order отсутствует буква «E» (от слова «Environment»), это означает, что PHP не будет автоматически заполнять глобальный массив $_ENV данными из окружения при инициализации. Это и является причиной того, что $_ENV пуст.

Если вы хотите, чтобы $_ENV содержал данные из окружения, вы можете добавить букву «E» в variables_order. То есть:

variables_order = "EGPCS"

После этого перезапустите ваш веб-сервер или PHP-FPM (если используется), чтобы изменения вступили в силу.

Однако учтите, что изменение этой настройки может повлиять на производительность, так как теперь PHP будет заполнять еще один суперглобальный массив при каждом запросе. Если вам редко требуется доступ к переменным окружения и вы предпочитаете не изменять variables_order, вы можете продолжать использовать функцию getenv(), которая будет работать независимо от этой настройки.

«Из коробки» же настройки variables_order могут выглядеть так:

Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS";
; http://php.net/variables-order
variables_order = "GPCS"

в данном случае массив $_ENV у вас будет отсутствовать. Но почему в комменте указано по дефолту EGPCS, а стоит значение GPCS?

Это вопрос дизайна конфигурации и решений, принятых разработчиками PHP.

Комментарии в php.ini обычно показывают значение по умолчанию (Default Value), которое предоставляется в исходном коде PHP. Однако реальное значение, установленное при развертывании (например, при установке пакета через менеджер пакетов в Linux), может быть определено рекомендациями разработчиков для конкретных режимов (разработка или продакшн).

В данном случае, комментарий показывает, что по умолчанию значение variables_order равно «EGPCS». Однако для настроек разработки (Development Value) и настроек продакшна (Production Value) рекомендуется значение «GPCS».

Когда вы устанавливаете PHP из некоторых репозиториев или дистрибутивов, конфигурационный файл php.ini может быть уже предварительно настроен с определенными рекомендациями, такими как «GPCS» для variables_order, вместо значения по умолчанию. Это делается, чтобы повысить безопасность или производительность «из коробки».

Таким образом, хотя значение по умолчанию «EGPCS» указано в комментариях, ваш конкретный дистрибутив или репозиторий PHP решил использовать «GPCS» для настроек как разработки, так и продакшна. В чем заключается повышение безопасности и производительности при отключении $_ENV мы обсудили в начале статьи.

Почему разработчики в cli исключили E значение и ставят variables_order = «GPCS» ведь там аспект безопасности как раз теряется во многом, я понимаю такую настройку для web использования(fpm-fpm/apache), но для cli… хотя это как посмотреть и как использовать cli…

Настройка variables_order = «GPCS» для CLI может показаться странной на первый взгляд, учитывая аргументы безопасности. Однако есть несколько возможных причин для этого:

  • Ожидаемое поведение: CLI-скрипты часто пишутся разработчиками для узкоспециализированных задач, и они ожидают определенного поведения. Изменение настроек по умолчанию может вызвать непредвиденные проблемы или сбои в скриптах.
  • Контролируемое окружение: CLI-скрипты, как правило, выполняются в более контролируемом окружении по сравнению с веб-приложениями. Разработчик или системный администратор обычно имеет больше контроля над тем, как и где запускаются эти скрипты, что может снизить риски, связанные с безопасностью.
  • Практические соображения: Во многих случаях переменные окружения являются основным способом передачи параметров в CLI-скрипты. Отключение $_ENV может создать неудобства для разработчиков, вынуждая их использовать getenv() для каждой переменной вместо доступа к глобальному массиву.

Тем не менее, если у вас есть определенные требования к безопасности или другие соображения, связанные с вашим CLI-приложением, вы всегда можете изменить настройки php.ini для CLI в соответствии с вашими потребностями. Всегда стоит подходить к конфигурации с учетом конкретного контекста использования и требований к безопасности.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *