Размещение сайта и безопасность
Сайт на Joomla — это папка с файлами и база данных. Перенести его на сервер несложно, но перед запуском нужно перевести сайт в рабочий режим и пройти по списку проверок: большинство взломов Joomla происходит из-за забытых обновлений и небрежных настроек.
Перенос
- Скопируйте на сервер все файлы сайта.
- Сделайте дамп локальной базы и загрузите его в базу на сервере.
- Исправьте настройки подключения в файле
configuration.phpв корне сайта.
// configuration.php
public $host = 'localhost';
public $db = 'joomla_prod';
public $user = 'joomla_user';
public $password = 'надёжный-пароль';
public $dbprefix = 'abc12_';
public $log_path = '/var/www/site/administrator/logs';
public $tmp_path = '/var/www/site/tmp';Это свойства класса JConfig. После правки откройте сайт: он должен работать так же, как локально. Пути log_path и tmp_path должны указывать на папки нового сервера.
Права на папки
Веб-серверу нужна запись в папки tmp, cache, administrator/cache, administrator/logs, images и media. Остальным файлам достаточно чтения. Проверить всё разом можно в панели: «Система → Информация о системе», вкладка «Права на папки».
Рабочие настройки
В разделе «Система → Общие настройки»:
| Настройка | Вкладка | Значение |
|---|---|---|
| Отладка системы | Система | Нет |
| Отладка языка | Система | Нет |
| Сообщения об ошибках | Сервер | Нет или «По умолчанию» |
| Принудительный HTTPS | Сервер | Весь сайт |
| Системный кеш | Система | Включён |
| Сжатие Gzip | Сервер | Включено |
| Понятные адреса | Сайт | Включены |
Для перезаписи адресов на Apache переименуйте файл htaccess.txt в корне сайта в .htaccess.
Безопасность сайта
| Мера | Зачем |
|---|---|
| Обновлять Joomla и расширения | Большинство взломов использует давно закрытые уязвимости |
| Удалять неиспользуемые расширения | Отключённое расширение всё ещё лежит на диске и может быть уязвимо |
| Многофакторный вход для администраторов | Украденного пароля будет недостаточно |
| Отдельный пользователь базы для сайта | Взлом одного сайта не откроет остальные базы |
| Регулярные резервные копии файлов и базы | Единственный способ восстановиться после сбоя или взлома |
| Хранить копии вне сервера | Копия на том же диске пропадёт вместе с сайтом |
Многофакторный вход включается в профиле пользователя, на вкладке «Многофакторная аутентификация».
Безопасность своих расширений
Правила из прошлых уроков, собранные вместе:
| Что проверить | Как |
|---|---|
| Прямой доступ к файлам | defined('_JEXEC') or die; в начале каждого файла PHP |
| Вывод в макетах | $this->escape() или htmlspecialchars() для всего, что пришло из базы или от пользователя |
| Запросы к базе | Значения только через bind(), имена — через quoteName() |
| Действия, меняющие данные | $this->checkToken() в контроллере и form.token в форме |
| Права | authorise() там, где действие выполняется |
| Данные запроса | Типизированные методы: getInt(), getString(), getCmd() |
| Поля форм | Атрибут filter у каждого поля |
Данные запроса читают из объекта ввода, а не из $_GET и $_POST:
$input = Factory::getApplication()->getInput();
$id = $input->getInt('id');
$search = $input->getString('q', '');getInt() вернёт целое число, что бы ни прислал посетитель; второй аргумент — значение по умолчанию.
После запуска
Откройте сайт в окне браузера без входа в панель и пройдите основные страницы. Затем проверьте журнал ошибок PHP на сервере и раздел «Система → Обновление»: и Joomla, и расширения должны быть последних версий.
Частая ошибка
Локальную копию configuration.php заливают на сервер поверх рабочей — вместе с включённой отладкой и локальными данными базы. Сайт либо не подключается к базе, либо показывает всем панель отладки с запросами. Держите рабочий configuration.php отдельно и исключите этот файл из переноса при обновлениях кода.