Глава 1. Введение и архитектура системы

03-07-26 14:48

В этой главе рассматриваются базовые понятия Seditio CMS, история её создания и развития, системные требования, архитектура, файловая структура движка, а также встроенные механизмы обеспечения безопасности.


1.1. Определение Seditio CMS, область применения и ключевые особенности

Seditio — это легковесная, быстрая и гибкая модульная система управления контентом (CMS) и платформа для веб-разработки (CMF), написанная на языке PHP и использующая СУБД MySQL.

1.1.1. Область применения

Благодаря высокой производительности, минималистичному ядру и гибкой системе шаблонов, Seditio отлично подходит для разработки:

  • Информационных и новостных порталов среднего и крупного масштаба.
  • Тематических сообществ с интегрированными форумами.
  • Корпоративных сайтов и сайтов-визиток.
  • Блогов, портфолио и личных страниц.
  • Веб-ресурсов с нестандартной структурой данных (благодаря возможностям CMF).

1.1.2. Ключевые особенности

  1. Полное разделение логики и представления. В Seditio PHP-код полностью отделен от HTML/CSS разметки. Шаблоны реализуются на основе файлов .tpl (шаблонизатор XTemplate SE), в которых используются специальные теги-плейсхолдеры (например, {PHP.cfg.mainurl} или {PAGE_TITLE}). Это позволяет веб-дизайнерам верстать интерфейс без необходимости написания PHP-кода.
  2. Процедурная архитектура (Процедурное ядро). Seditio CMS является одной из немногих современных активно поддерживаемых систем, сохраняющих эффективную процедурную архитектуру кода. Вместо тяжеловесных каскадов ООП-абстракций, паттернов проектирования, фабрик классов и контейнеров внедрения зависимостей (DI), ядро Seditio построено на наборе плоских, последовательных функций. Это обеспечивает:
    • Низкий порог входа: Разработчику достаточно базового понимания процедурного программирования на PHP и глобальных областей видимости для создания полноценных модулей и плагинов.
    • Экстремальное быстродействие: Вызов процедурных функций и прямой доступ к глобальным структурам данных ($cfg, $usr, $L, $db_*) выполняются значительно быстрее инициализации объектного графа ООП-фреймворков. Seditio генерирует страницы за единицы миллисекунд и потребляет минимум оперативной памяти (в пределах 2–4 МБ на хит).
    • Простоту отладки и прозрачность: Трассировка выполнения кода прямолинейна, что минимизирует время поиска ошибок и упрощает технический аудит кодовой базы.
  3. Высокая скорость работы и низкая нагрузка. Ядро системы оптимизировано для работы с минимальным количеством SQL-запросов. Встроенная система кэширования и автозагрузки данных снижает нагрузку на базу данных.
  4. Модульность. Архитектура построена на четком разделении ядра, подключаемых функциональных модулей (Modules) и расширений-плагинов (Plugins).
  5. Безопасность «из коробки». Система жестко фильтрует все входящие данные, имеет встроенные механизмы защиты от CSRF/XSS атак и гибкую подсистему контроля доступа пользователей (ACL).
  6. SEO-ориентированность. Поддержка ЧПУ (SEF URLs) с настраиваемыми правилами перезаписи URL и встроенные средства управления мета-тегами.

1.2. Краткая история создания и развития Seditio

История Seditio длится уже более двадцати лет. За это время движок успел сменить имя, побывать на грани закрытия, пережить масштабную техническую революцию и переехать из Франции в Россию. Весь этот путь можно разделить на четыре ключевых этапа:

  • Эпоха LDU: любимец геймеров и хакеров (2001–2006 гг.). Всё началось во Франции, где программист Оливье Шапуи из компании Neocrome (город Гренобль) создал движок Land Down Under (LDU). Система вышла настолько быстрой, легкой и защищенной, что мгновенно стала культовой в двух совершенно разных, но очень требовательных сферах. С одной стороны, на ней массово собирали огромные игровые порталы и сайты игровых сообществ. С другой — из-за маниакальной устойчивости к взломам LDU стал главным выбором для создания закрытых форумов и крупных сайтов, посвященных хак-тематике и кибербезопасности, которые в те годы постоянно подвергались жестким атакам.
  • Рождение Seditio и появление Cotonti (2006–2009 гг.). В 2006 году движок пережил глобальную перестройку архитектуры и сменил имя на Seditio (официально — LDU Second Edition). Главный упор сделали на удобную работу с плагинами. Когда в 2008 году Оливье взял паузу в разработке, часть команды с его официального согласия создала независимый форк — Cotonti, который стал развиваться параллельно как полностью открытый проект.
  • Завершение авторского этапа (2011–2012 гг.). Оливье Шапуи довел систему до 150-й версии и объявил о закрытии проектов LDU и Seditio. Позже он попытался вернуться, чтобы выпустить ветку 160/170 и перевести систему на HTML-парсинг вместо привычных BB-кодов. Однако это породило серьезные проблемы с безопасностью. Не пожелав жертвовать защищенностью движка, Оливье принял решение окончательно свернуть лавочку.
  • Современный этап: переезд в Россию (с 2012 года по настоящее время). Движок не погиб. В 2012 году российские разработчики Александр Тишов (Amro) и Антон Сазанов (Antony) получили от Оливье официальное разрешение полностью забрать Seditio под свое крыло. Основным автором всего программного кода с этого момента стал Александр Тишов (Amro). Антон Сазанов (Antony) — владелец исторического портала ldu.ru (который еще с начала 2000-х был главным русскоязычным оплотом поддержки системы, а сейчас стал по сути зеркалом официального сайта) — взял на себя идеологию, проектирование концептов и развитие документации. Также огромный вклад в развитие проекта внесло турецкое комьюнити. Проект перевели на свободную лицензию BSD, полностью осовременили и довели до стабильной версии 185.

1.2.1. От истоков к современности: бережное развитие наследия Оливье

История Seditio — это редкий пример того, как гениально заложенный технический фундамент живет десятилетиями, если развивать его с умом и уважением к истокам.

Когда проект перешел к новой команде, перед ними встал серьезный вызов. Нужно было сделать систему современной — адаптировать под новые версии PHP, требования SEO, стандарты безопасности и верстки. Но при этом нельзя было сломать то, за что этот движок когда-то полюбили и геймеры, и хакеры, и веб-разработчики.

Команда сознательно отказалась от идеи превратить Seditio в тяжеловесного монстра по образу современных ООП-фреймворков. Они бережно сохранили первоначальную «ДНК» Оливье Шапуи: простое процедурное ядро, чистые функции, абсолютное разделение логики и дизайна через шаблоны, минимальное потребление памяти и феноменальную скорость работы. Каждое новое обновление пишется так, чтобы держать идеальный баланс между духом старой школы и требованиями современного веба.

1.2.2. Хронология версий: две эпохи разработки

За каждым релизом стоит своя философия работы с контентом и кодом:

  • Версии Оливье Шапуи (Neocrome): 100, 102, 110, 120, 121, 125, 126, 130, 150, 161, 170. Оливье создал прекрасную концепцию: быстро, легко и понятно. В те годы форматирование текста полностью опиралось на безопасный, но ограниченный стандарт BBcode. Движок был стабилен, но когда веб-стандарты начали требовать полноценного HTML, Оливье попытался внедрить HTML-парсинг в версиях 160 и 170. К сожалению, без надежной системы фильтрации это привело к критическим уязвимостям и взломам сайта neocrome.net, из-за чего автор принял решение прекратить разработку.
  • Версии Александра Тишова (Seditio Team): 171, 172, 173, 175, 177, 178, 179, 180, 185. Александр (Amro) познакомился с движком LDU еще в версии 801, будучи студентом университета. Проект сразу привлек его своей логичной структурой и простотой понимания. Позже он основал собственную веб-студию и создавал коммерческие сайты клиентов на базе этой же системы. Когда Оливье объявил о закрытии платформы, перед ним встал серьезный выбор. Если бы активных сайтов было немного, проще было бы мигрировать на другую CMS. Однако обязательства перед заказчиками и внушительное количество работающих проектов студии буквально заставили его бороться за продолжение жизни движка. Александр взял на себя сложнейшую задачу — полностью перевести Seditio на современную разметку HTML и визуальные редакторы, сохранив и даже приумножив безопасность сайтов. Решением стала разработка принципиально новой системы импорта и жесткой фильтрации входящих данных, с которой и началась глубокая модернизация.

1.2.3. Эволюция в цифрах: масштаб изменений под капотом

Хотя Seditio осталась такой же быстрой и нетребовательной к ресурсам, в ее кодовой базе произошли колоссальные изменения, которые лучше всего понятны на языке статистики:

  • Глубокая переработка кода: Около 94% логического PHP-кода ядра и модулей сегодня является абсолютно новым или полностью переписанным с нуля. От оригинального PHP-кода версии 170 (последней версии Оливье) без изменений осталось лишь 6% строк.
  • Трехкратный рост возможностей: Общий объем чистого PHP-кода ядра и модулей вырос более чем в 3 раза — с 26 000 строк (в версии 170) до 85 000 строк (в текущей стабильной версии v185).

1.2.4. Что изменилось для разработчика и владельца сайта?

Эти тысячи строк кода пошли на кардинальное улучшение архитектуры движка и внедрение современных стандартов:

  1. Идеальный порядок (Переход к модулям): Раньше в корне сайта лежала куча файлов (page.php, forums.php, users.php и т.д.). Теперь корень стал чистым, а вся основная логика аккуратно распределена по изолированным модулям в папке /modules/. Это сделало систему гораздо опрятнее и удобнее для расширения.
  2. Единый пульт управления и красивые ссылки (ЧПУ): Теперь на сайте работает концепция Front Controller. За абсолютно все запросы отвечает единственный файл index.php. Он же прямо из коробки умеет обрабатывать человекопонятные адреса (ЧПУ) по простым и гибким правилам.
  3. Дружба с современным PHP 8.x: Драйвер базы данных был полностью переписан на system/database.mysqli.php. Благодаря этому Seditio без проблем и предупреждений запускается на самом актуальном серверном окружении, где старый PHP 5 давно уступил место PHP 8.
  4. Порядок в коде и безопасность: Все функции ядра получили подробную документацию, понятную для новых разработчиков. Внедрена строгая защита от современных интернет-угроз (CSRF, XSS и инъекций) и жесткая фильтрация входящих данных.

В итоге: Современная Seditio — это мощная и надежная система нового поколения, сохранившая душу, философию легкости и привычную структуру функций, которые в свое время придумал Оливье Шапуи.


1.3. Системные требования и окружение

Для развертывания и корректной работы Seditio CMS требуется следующее программное окружение:

1.3.1. Минимальные системные требования

  • Веб-сервер: Apache 2.x (с модулем mod_rewrite для поддержки ЧПУ) или Nginx (с настроенными правилами rewrite).
  • PHP: Версия 5.6.0 или выше (включая полную совместимость с ветками PHP 7.x и PHP 8.x). Веб-инсталлятор Seditio осуществляет проверку соответствия версии PHP условию version_compare(PHP_VERSION, '5.6') >= 0.
  • СУБД: MySQL 5.0.7 или выше / MariaDB (с поддержкой расширения mysqli).

1.3.2. Расширения PHP

  • Проверяемые инсталлятором как обязательные:
    • mysqli — драйвер для взаимодействия с базой данных MySQL.
    • Mbstring — необходимо для корректной работы с многобайтовыми кодировками (UTF-8) в строковых функциях ядра.
    • GD — требуется для генерации миниатюр, обработки аватаров, галереи изображений и капчи.
  • Используемые ядром системы:
    • Hash — используется для генерации безопасных токенов и хеширования паролей.
    • 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=имя_модуля.

Подробное описание встроенных модулей и процесса их разработки приведено в Главе 5. Встроенные модули и Главе 6. Архитектура и разработка модулей.

1.4.3. Плагины (Plugins)

Плагины предназначены для расширения функционала ядра или модулей без модификации их исходного кода. В Seditio реализована гибкая система плагинов:

  • Событийные плагины (на хуках): подключаются в местах вызова функции sed_getextplugins() в коде ядра. Они выполняются в контексте вызывающего скрипта и имеют доступ к его переменным.
  • Автономные плагины (Standalone/Direct): работают как самостоятельные страницы через фронт-контроллер /plug (или index.php?module=plug).

Подробное руководство по созданию, структуре, регистрации хуков и режимам вызова плагинов приведено в Главе 8. Архитектура и разработка плагинов.


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/config.extensions.php — конфигурационный файл с массивом разрешенных расширений, групп и иконок файлов для PFS.
    • /system/core/ — базовые контроллеры ядра (например, /system/core/admin/ для панели управления, /system/core/plug/ для обработки плагинов).
    • /system/lang/ — файлы локализации системы на разных языках.
  • /index.php — главный входной файл. Парсит входящий URI, сопоставляет его с правилами ЧПУ и подключает нужный модуль или скрипт ядра.
  • /.htaccess — файл конфигурации Apache, содержащий правила перенаправления запросов на index.php для работы ЧПУ.

1.6. Безопасность системы: фильтрация данных, токены защиты и уровни доступа

Безопасность Seditio строится на трех фундаментальных принципах:

1.6.1. Встроенные механизмы безопасности (фильтрация и защита от CSRF)

Для обеспечения безопасности данных ядро Seditio CMS использует следующие встроенные механизмы:

  • Безопасная фильтрация данных (Input Filtering): В коде движка запрещено прямое обращение к глобальным массивам $_GET, $_POST или $_COOKIE. Все входящие данные импортируются и проходят фильтрацию через глобальную функцию sed_import(), которая поддерживает 12 типов фильтров (включая INT, NUM, TXT, SLU, ALP, HTM, BOL и др.).
  • Защита от CSRF и XSS-атак: Для защиты от межсайтовой подделки запросов Seditio применяет уникальные сессионные токены безопасности, генерируемые функцией sed_sourcekey(). GET-запросы проверяются функцией sed_check_xg(), формы POST — функцией sed_check_xp(), а асинхронные вызовы AJAX проверяются по заголовку X-Seditio-Csrf с помощью sed_check_csrf().

Подробное техническое описание всех 12 фильтров ввода, алгоритма генерации токенов безопасности, а также защиты от SQL-инъекций приведено в Главе 10. Безопасность и оптимизация производительности.

1.6.2. Разграничение прав доступа (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.00)

Пока комментариев нет