Ревью расширения Joomla перед установкой: что проверять
Архив расширения Joomla может выглядеть аккуратно и всё же запускать опасный код при установке или открывать доступ к данным сайта. Разбираем, как проверить манифест, PHP, SQL и сценарии установки до того, как пакет попадёт на рабочий сервер.

Расширение Joomla может пройти установку, но повредить сайт позднее: например, оставить исполняемый файл доступным из браузера, выполнить неожиданный SQL-запрос или не удалить временные данные при обновлении. В этом разборе — что проверять в архиве до установки, какие замечания оставлять автору и где ревью перестаёт быть гарантией безопасности. Ориентир — расширения для Joomla 5.x; требования конкретного пакета и совместимость с вашей версией PHP проверяйте отдельно.
Сначала установите границы проверки
Ревью архива отвечает на вопрос «что этот пакет собирается добавить и выполнить», но не доказывает, что расширение безопасно во всех сценариях. Код может подгружаться с удалённого сервера, запускаться только при определённой роли пользователя или вести себя иначе после обновления. Поэтому проверяйте не только PHP-файлы, но и манифест, SQL, скрипты установки и зависимости.
До начала работы подготовьте копию архива, отдельную тестовую Joomla 5.x и резервную копию базы данных тестового сайта. Зафиксируйте версию Joomla, PHP и расширения: без этого нельзя воспроизвести найденную проблему. Не устанавливайте неизвестный пакет на рабочий сайт «на минуту» — установщик может выполнять код ещё до того, как вы откроете интерфейс расширения.
Безопасность расширения — не свойство его архива само по себе. Это результат проверки конкретной версии пакета в конкретном окружении, включая установку, обновление и удаление.
Разберите пакет до запуска
Распакуйте архив в изолированной среде и сопоставьте его содержимое с манифестом. В Joomla манифест описывает установку расширения: тип пакета, файлы и другие сведения, нужные установщику. Если архив содержит файлы, которых манифест не объясняет, выясните их назначение. Особенно внимательно изучайте PHP-скрипты, SQL-файлы и установочные обработчики.
- Манифест: проверьте тип расширения, список устанавливаемых файлов, языковые файлы и сценарии установки. Сверьте заявленные требования с документацией и описанием релиза.
- PHP-код: найдите точки входа, обработчики запросов, загрузку файлов, работу с базой и вызовы внешних сервисов. Проследите путь от входных данных до SQL-запроса или файловой операции.
- SQL и обновления схемы: проверьте, какие таблицы и данные создаются, изменяются или удаляются. Уточните, что произойдёт при повторном запуске обновления и при установке на сайт с существующими данными.
- Сценарии установки и удаления: проверьте, что они делают при установке, обновлении и деинсталляции. Удаление расширения не должно неожиданно стирать пользовательские данные без ясного предупреждения и предусмотренного механизма резервирования.
- Зависимости и сеть: выясните, загружает ли пакет код, библиотеки или настройки с внешних адресов. Уточните, что останется работоспособным, если внешний сервис недоступен.
Манифест — XML-файл, по которому Joomla узнаёт, как устанавливать и обновлять расширение. Его содержимое важно сверять с реальными файлами архива, а не принимать описание автора на веру.
Что проверять в коде Joomla
Входные данные и права доступа
Для каждого действия, меняющего данные, задайте три вопроса: кто может его вызвать, какие входные значения принимает обработчик и как подтверждается право на действие. Наличие кнопки только для администратора не доказывает, что запрос нельзя отправить напрямую. Проверьте серверную проверку прав и защиту от поддельного запроса там, где действие меняет состояние.
Проверьте, проходят ли данные пользователя через штатные для Joomla механизмы проверки прав и фильтрации. Для SQL особенно важны подготовленные запросы или безопасная передача параметров; конкатенация пользовательского ввода с текстом запроса — повод проследить весь путь данных и потребовать исправление. В шаблонах ищите вывод непроверенных данных в HTML, атрибутах и JavaScript: контекст вывода определяет, какая защита нужна.
Файлы, секреты и внешние вызовы
Функция загрузки файла требует проверки типа, размера, имени и места сохранения. Убедитесь, что загруженный файл не становится исполняемым скриптом и что проверка выполняется на сервере. Поиск по архиву на слова «token», «password» и «secret» полезен, но сам по себе ничего не доказывает: секрет может быть спрятан в конфигурации или передаваться из внешнего сервиса.
Любой внешний запрос — это зависимость, задержка и дополнительный риск. Зафиксируйте, какой адрес вызывается, какие данные уходят, как обрабатываются ошибки и есть ли ограничение времени ожидания. Если расширение неожиданно отправляет данные сайта стороннему сервису, установка должна быть остановлена до объяснения назначения и объёма передачи.
Формулируйте замечания так, чтобы их можно было проверить
Ревью полезно, когда автор понимает воспроизводимый сценарий и критерий исправления. Вместо «код небезопасен» укажите файл, участок логики, условия и возможное последствие. Например:
- «В обработчике сохранения значение из запроса попадает в SQL без безопасной передачи параметра. Передайте значение отдельно от текста запроса и добавьте тест с кавычками во входных данных».
- «Проверка роли спрятана только в интерфейсе. Повторите её на серверной стороне обработчика и проверьте прямой запрос от пользователя без нужных прав».
- «При удалении расширения выполняется удаление таблицы с пользовательскими данными. Уточните, предусмотрено ли сохранение данных или явное предупреждение перед необратимым действием».
- «Манифест не объясняет присутствие этого PHP-файла в архиве. Укажите его назначение и добавьте в описание установки, либо исключите файл из пакета».
- «Внешний запрос может передавать данные сайта, но назначение и состав данных не описаны. Документируйте передачу и предусмотрите понятное поведение при недоступности сервиса».
Какие проверки дают разные сигналы
| Проверка | Что помогает найти | Чего не гарантирует |
|---|---|---|
| Ручной просмотр архива и кода | Необъяснимые файлы, опасные сценарии, несоответствие манифесту | Не покрывает все пути исполнения и скрытое поведение при особых условиях |
| Статический анализ | Часть подозрительных конструкций и типовых ошибок | Не подтверждает, что найденное — уязвимость, и может пропустить логику приложения |
| Установка и функциональные проверки на тестовом сайте | Ошибки установки, обновления, интерфейса и совместимости в проверенной среде | Не доказывает безопасность при другой версии PHP, другой роли или иных данных |
Не превращайте зелёный результат сканера в сертификат безопасности. Инструмент видит только те шаблоны и сценарии, для которых умеет проверять код. Перед установкой на рабочий сайт сочетайте просмотр архива с тестом установки, обновления и удаления на копии сайта.
Где ревью может ошибиться
Одна из частых ловушек — проверять только текущую установку, а не обновление. Миграционный скрипт может вести себя иначе, чем первоначальная установка. Другая — оценивать код без контекста: функция, выглядящая опасной, может получать уже проверенные данные, а аккуратный на вид обработчик — вызываться без серверной проверки прав.
Ручное ревью также зависит от полноты архива. Если расширение устанавливает зависимости, загружает файлы позже или меняет поведение через настройки, одного просмотра PHP-кода недостаточно. Проверяйте состав конкретного релиза и фиксируйте его контрольную сумму, чтобы тестировать и устанавливать один и тот же пакет.
Результат зависит от версии Joomla, PHP, настроек сервера, расширений-конкурентов и сценария обновления. Если пакет поддерживает несколько версий Joomla или PHP, проверяйте каждую заявленную комбинацию, которая важна для вашего сайта. Не переносите выводы с тестового стенда на рабочий без проверки его отличий.
Что делать дальше
Сохраните отчёт ревью рядом с версией архива: перечислите проверенные версии Joomla и PHP, найденные замечания, результат установки, обновления и удаления. После исправлений повторите тесты на чистой копии сайта, а затем наблюдайте за журналами ошибок и сетевыми запросами расширения после установки. Следующий шаг — сверить требования пакета с официальной документацией Joomla и проверить, что установлен именно тот релиз, который вы ревьюили.
IT-архитектор / SQL-оптимизатор: Поиск N+1, оптимизация запросов, code review, поиск багов.
Спросить за 20 ₽Источники: Joomla Documentation: Building Extensions, Joomla Documentation: Manifest Files
Частые вопросы
Можно ли считать расширение безопасным, если антивирус ничего не нашёл?
Нужно ли проверять файлы после установки, если архив уже прошёл ревью?
Что делать, если автор не объясняет внешний запрос расширения?
Достаточно ли протестировать расширение на одной версии Joomla?
Зачем проверять удаление расширения, если я собираюсь его установить?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.