Я начинаю разрабатывать что-то (самостоятельно размещенное — каждый пользователь устанавливает его на свой сервер — возможно, на общий сервер), которое позволяет пользователям загружать чужой код (плагины).
Одна проблема, о которой я беспокоюсь, это плагины, изменяющие файлы Core.
Поток приложения выглядит примерно так:
index.php
> Core()
> (do stuff)
> load/execute plugins <- may have code to replace a Core file
> (do stuff)
> exit
Я пытаюсь ограничить доступ плагинов либо файлы или же PHP функции.
Было бы здорово, если бы плагинам разрешалось использовать только базовые классы / методы.
Поскольку он размещается самостоятельно (и может быть использован кем-то, кто не является разработчиком), я не могу контролировать система, apache.conf или же php.ini. Я могу создавать только файлы .htaccess.
Решения о которых я думал:
~ Использование token_get_all () для файлов * .php (во время установки плагина) и проверьте, есть ли какое-либо использование таких функций, как команда chgrp, CHMOD, Чаун, копия, и т.д. Но это не идеально, и я уверен, что я бы пропустил некоторые функции.
Другие решения (из комментариев):
x Изменение разрешений для папок — можно сделать через php, но так же могут быть плагины и ядро не может обновляться
x Редактирование php.ini для предотвращения использования функций — Не могу. Нет доступа к php.ini.
х Использование snuffleupagus пакет — не могу. Это расширение PHP.
Одна проблема, о которой я беспокоюсь, это плагины, изменяющие файлы Core.
Отправьте ваши основные файлы в виде подписанный архив PHP.
Я пытаюсь ограничить доступ плагинов к файлам или функциям PHP. Было бы здорово, если бы плагинам разрешалось использовать только базовые классы / методы.
Это очень сложная проблема, и ее решение выходит далеко за рамки ответа StackOverflow. Как минимум, вам нужно убедиться, что серверная загрузка попадает в вашу среду (что хорошо работает, если вы используете подписанный файл .phar, а не изменяемый файл .php).
Однако, кроме этого, вы не можете запретить плагинам вызывать функции PHP в стандартной библиотеке. Альтернативный подход может заключаться в создании механизма шаблонов (например, подобного прут) и разрешать писать плагины только на вашем доменном языке, который не может вызывать произвольные функции PHP, только те, которые вы предоставляете.
Других решений пока нет …