В этой главе рассматриваются базовые понятия Seditio CMS, история её создания и развития, системные требования, архитектура, файловая структура движка, а также встроенные механизмы обеспечения безопасности.
1.1. Определение Seditio CMS, область применения и ключевые особенности
Seditio — это легковесная, быстрая и гибкая модульная система управления контентом (CMS) и платформа для веб-разработки (CMF), написанная на языке PHP и использующая СУБД MySQL.
1.1.1. Область применения
Благодаря высокой производительности, минималистичному ядру и гибкой системе шаблонов, Seditio отлично подходит для разработки:
- Информационных и новостных порталов среднего и крупного масштаба.
- Тематических сообществ с интегрированными форумами.
- Корпоративных сайтов и сайтов-визиток.
- Блогов, портфолио и личных страниц.
- Веб-ресурсов с нестандартной структурой данных (благодаря возможностям CMF).
1.1.2. Ключевые особенности
- Полное разделение логики и представления. В Seditio PHP-код полностью отделен от HTML/CSS разметки. Шаблоны реализуются на основе файлов
.tpl(шаблонизатор XTemplate SE), в которых используются специальные теги-плейсхолдеры (например,{PHP.cfg.mainurl}или{PAGE_TITLE}). Это позволяет веб-дизайнерам верстать интерфейс без необходимости написания PHP-кода. - Процедурная архитектура (Процедурное ядро). Seditio CMS является одной из немногих современных активно поддерживаемых систем, сохраняющих эффективную процедурную архитектуру кода. Вместо тяжеловесных каскадов ООП-абстракций, паттернов проектирования, фабрик классов и контейнеров внедрения зависимостей (DI), ядро Seditio построено на наборе плоских, последовательных функций. Это обеспечивает:
- Низкий порог входа: Разработчику достаточно базового понимания процедурного программирования на PHP и глобальных областей видимости для создания полноценных модулей и плагинов.
- Экстремальное быстродействие: Вызов процедурных функций и прямой доступ к глобальным структурам данных (
$cfg,$usr,$L,$db_*) выполняются значительно быстрее инициализации объектного графа ООП-фреймворков. Seditio генерирует страницы за единицы миллисекунд и потребляет минимум оперативной памяти (в пределах 2–4 МБ на хит). - Простоту отладки и прозрачность: Трассировка выполнения кода прямолинейна, что минимизирует время поиска ошибок и упрощает технический аудит кодовой базы.
- Высокая скорость работы и низкая нагрузка. Ядро системы оптимизировано для работы с минимальным количеством SQL-запросов. Встроенная система кэширования и автозагрузки данных снижает нагрузку на базу данных.
- Модульность. Архитектура построена на четком разделении ядра, подключаемых функциональных модулей (Modules) и расширений-плагинов (Plugins).
- Безопасность «из коробки». Система жестко фильтрует все входящие данные, имеет встроенные механизмы защиты от CSRF/XSS атак и гибкую подсистему контроля доступа пользователей (ACL).
- SEO-ориентированность. Поддержка ЧПУ (SEF URLs) с настраиваемыми правилами перезаписи URL и встроенные средства управления мета-тегами.
1.2. Краткая история создания и развития Seditio
История Seditio насчитывает более двух десятилетий и включает несколько ключевых этапов развития:
- Эпоха LDU (2001–2006 гг.): Движок зародился в 2001 году под названием Land Down Under (LDU). Его автором стал французский программист Оливье Шапуи (компания Neocrome). Простая, быстрая и безопасная система на PHP/MySQL быстро набрала популярность, особенно в геймерском сообществе, где её использовали для создания игровых порталов.
- Переход к Seditio и появление Cotonti (2006–2009 гг.): В 2006 году LDU пережил ребрендинг и глубокую переработку архитектуры, получив название Seditio (Land Down Under Second Edition). Основной акцент был сделан на улучшение поддержки плагинов. В 2008 году Neocrome приостановила выпуск версий, и часть команды с официального согласия автора создала форк — Cotonti (выпущен в 2009 г.), который стал развиваться параллельно как полностью открытый проект.
- Завершение авторского этапа (2011–2012 гг.): В 2011 году Оливье Шапуи объявил о закрытии проектов LDU и Seditio на версии 150. Попытка возобновить разработку в 2012 году выпуском версии 160 не увенчалась успехом из-за найденных уязвимостей в безопасности.
- Современный этап (с 2012 г. по настоящее время): В 2012 году российские разработчики Александр Тишов (Amro) и Антон Сазанов (Antony) получили официальное разрешение от Оливье Шапуи на продолжение развития и сопровождение движка Seditio. Основной вклад в дальнейшую разработку системы и написание всего её кода вносит Александр Тишов (Amro). Значительный вклад в развитие проекта также внесло турецкое сообщество разработчиков. Проект был переведен на модель открытого ПО под лицензией BSD и прошел путь версий от 171 до стабильной 185. Система непрерывно совершенствуется под задачи современных коммерческих и общественных проектов, сохраняя ориентир на простоту, скорость и безопасность.
1.3. Системные требования и окружение
Для развертывания и корректной работы Seditio CMS требуется следующее программное окружение:
1.3.1. Минимальные системные требования
- Веб-сервер: Apache 2.x (с модулем
mod_rewriteдля поддержки ЧПУ) или Nginx (с настроенными правилами rewrite). - PHP: Версия 5.6.0 или выше (включая полную совместимость с ветками PHP 7.x и PHP 8.x).
- СУБД: MySQL 5.0.7 или выше / MariaDB (с поддержкой расширения
mysqli).
1.3.2. Обязательные расширения PHP
GD— требуется для генерации миниатюр, обработки аватаров, галереи изображений и капчи.Hash— используется для генерации безопасных токенов и хеширования паролей.Mbstring— необходимо для корректной работы с многобайтовыми кодировками (UTF-8) в строковых функциях ядра.mysqli— драйвер для взаимодействия с базой данных MySQL.PCRE— библиотека регулярных выражений для маршрутизации и валидации данных.Sessions— поддержка сессий PHP для авторизации пользователей.
1.4. Общая архитектура: Core, Modules, Plugins
Архитектурно Seditio разделена на три основных слоя: Ядро (Core), Модули (Modules) и Плагины (Plugins). Эта трехуровневая модель обеспечивает баланс между высокой производительностью базовой системы, функциональностью ключевых разделов сайта и гибкостью расширения возможностей движка без вмешательства в его исходный код.
1.4.1. Ядро (Core)
Ядро Seditio обеспечивает базовую жизнедеятельность системы:
- Инициализация окружения, конфигурации и локализации.
- Управление сессиями и аутентификация пользователей.
- Механизм разграничения прав доступа (ACL).
- Работа с базой данных через обёртку
mysqli. - Шаблонизатор (XTemplate SE) для рендеринга страниц.
- Роутинг запросов и обработка ЧПУ.
Основные системные библиотеки ядра сосредоточены в каталоге system/.
1.4.2. Модули (Modules)
Модули представляют собой крупные, функционально законченные разделы сайта, которые могут работать независимо друг от друга. Примеры встроенных модулей:
page— управление страницами и категориями контента.forums— полноценный форум.users— личные кабинеты, профили, группы и регистрация.pfs— персональная файловая система (загрузка файлов, менеджер медиа).
Каждый модуль располагается в собственной директории внутри /modules/ и подключается через точку входа index.php?module=имя_модуля.
1.4.3. Плагины (Plugins)
Плагины предназначены для расширения функционала ядра или модулей без модификации их исходного кода. В Seditio реализована гибкая система плагинов:
- Событийные плагины (на хуках): подключаются в местах вызова функции
sed_getextplugins()в коде ядра. Они выполняются в контексте вызывающего скрипта и имеют доступ к его переменным. - Автономные плагины (Standalone/Direct): работают как самостоятельные страницы через фронт-контроллер
/plug(илиindex.php?module=plug).
Подробное руководство по созданию, структуре, регистрации хуков и режимам вызова плагинов приведено в Главе 7. Архитектура и разработка плагинов.
1.5. Файловая структура движка
Корневой каталог Seditio содержит следующие основные директории и файлы:
/datas/— папка для изменяемых динамических данных. Сюда загружаются аватары, фотографии галереи, файлы пользователей (datas/users), а также здесь хранится конфигурационный файлdatas/config.phpи кэш системы (datas/cache/). Эта папка должна иметь права на запись (CHMOD 777или775)./modules/— содержит подпапки со встроенными и установленными модулями (например,/modules/page/,/modules/forums/)./plugins/— содержит подпапки со всеми плагинами (например,/plugins/comments/,/plugins/ckeditor/)./skins/— темы оформления сайта. Каждая тема содержит файлы шаблонов с расширением.tpl, изображения, скрипты и стили./system/— ядро системы:/system/common.php— главный конфигурационный и инициализационный скрипт. Подключает БД, загружает настройки, сессии и права доступа./system/functions.php— основной набор глобальных функций API Seditio (включая работу с пользователями, строками, ЧПУ)./system/functions.admin.php— вспомогательные функции для административной панели (управление структурой, правами доступа, логированием, рендеринг списков)./system/functions.image.php— функции обработки изображений (ресайз, создание миниатюр, водяные знаки, кроп)./system/templates.php— класс и вспомогательные функции шаблонизатора XTemplate SE (парсер TPL-файлов)./system/database.mysqli.php— модуль взаимодействия с базой данных MySQL (обёртка mysqli)./system/config.urlrewrite.php— глобальная конфигурация правил перезаписи ЧПУ (SEF URL)./system/config.urltranslation.php— правила трансляции/транслитерации параметров и символов при генерации URL./system/core/— базовые контроллеры ядра (например,/system/core/admin/для панели управления,/system/core/plug/для обработки плагинов)./system/lang/— файлы локализации системы на разных языках.
/index.php— главный входной файл. Парсит входящий URI, сопоставляет его с правилами ЧПУ и подключает нужный модуль или скрипт ядра./.htaccess— файл конфигурации Apache, содержащий правила перенаправления запросов наindex.phpдля работы ЧПУ.
1.6. Безопасность системы: фильтрация данных, токены защиты и уровни доступа
Безопасность Seditio строится на трех фундаментальных принципах:
1.6.1. Безопасная фильтрация данных (Input Filtering)
В коде Seditio запрещено напрямую обращаться к суперглобальным массивам $_GET, $_POST или $_COOKIE для получения параметров. Все входящие данные импортируются и очищаются через функцию sed_import() (файл /system/functions.php):
$id = sed_import('id', 'G', 'INT');
$text = sed_import('rtext', 'P', 'TXT');
Основные типы фильтрации:
INT/NUM— приведение к целому или вещественному числу.TXT— очистка текста, экранирование HTML-тегов (htmlspecialchars).SLU— Slug-формат (только буквы, цифры, дефис, подчёркивание).ALP— только латинские буквы и цифры.HTM— HTML-код, пропущенный через фильтр плагинов (например, Jevix для защиты от XSS).HTR— доверенный HTML без фильтрации (используется только для администраторов).
1.6.2. Защита от CSRF-атак (Cross-Site Request Forgery)
Для защиты от подделки запросов Seditio использует уникальные защитные токены безопасности, привязанные к сессии пользователя.
- Токен генерируется функцией
sed_sourcekey()(файл/system/functions.php). - В GET-запросах, изменяющих состояние системы (например, удаление страницы, очистка кэша), передается параметр
x(например,&x=abc123xyz). Проверка осуществляется вызовомsed_check_xg()(файл/system/functions.php). - В POST-формах передается скрытое поле
x. Проверка осуществляется функциейsed_check_xp()(файл/system/functions.php). Для AJAX-запросов поддерживается передача токена в HTTP-заголовкеX-Seditio-CSRF.
1.6.3. Разграничение прав доступа (ACL — Access Control List)
Система разграничения прав доступа в Seditio построена на гибкой и очень быстрой групповой модели с использованием битовых масок.
Ключевые принципы:
- Групповое наследование: Права настраиваются для групп пользователей (например, «Гости», «Зарегистрированные», «Модераторы»). Каждый пользователь наследует права тех групп, в которых он состоит. Если пользователь состоит в нескольких группах, его права объединяются побитовым сложением «ИЛИ» (
|). - Адресация прав: Права проверяются для конкретной области (
area— например,page,forums,admin) и ресурса (option— код категории страниц или ID ветки форума). - Битовые маски прав: Каждое разрешение кодируется степенью двойки:
Read(Чтение) = 1,Write(Запись) = 2,Admin(Администрирование) = 128, плюс 5 пользовательских битов (4, 8, 16, 32, 64) для кастомных нужд модулей и плагинов.
Для детального изучения устройства системы разграничения прав доступа, структуры таблиц в базе данных, кэширования прав в поле user_auth и процесса проверки авторизации в PHP-коде обратитесь к Главе 4. Система пользователей и разграничение прав (ACL).
Комментарии: (0)