Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Размещение сайта и безопасность

Сайт на Joomla — это папка с файлами и база данных. Перенести его на сервер несложно, но перед запуском нужно перевести сайт в рабочий режим и пройти по списку проверок: большинство взломов Joomla происходит из-за забытых обновлений и небрежных настроек.

Перенос

  1. Скопируйте на сервер все файлы сайта.
  2. Сделайте дамп локальной базы и загрузите его в базу на сервере.
  3. Исправьте настройки подключения в файле 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 отдельно и исключите этот файл из переноса при обновлениях кода.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.