Открыть сервис

SSI

SSI (Server-Side Includes, серверные включения) — это технология веб-разработки, позволяющая вставлять динамическое содержимое в статические HTML-страницы на стороне веб-сервера. SSI представляет собой набор директив, которые обрабатываются сервером перед отправкой страницы клиенту, что даёт возможность включать в документ фрагменты кода, результаты выполнения скриптов, переменные окружения и другие данные без использования полноценных серверных языков программирования, таких как PHP, ASP.NET или Java.

История

Технология SSI была разработана в начале 1990-х годов как часть серверного программного обеспечения NCSA HTTPd, одного из первых веб-серверов. С ростом популярности Apache HTTP Server (выпущенного в 1995 году) SSI получила широкое распространение, поскольку Apache включил поддержку этой технологии в свой модуль mod_include. В 1990-х и начале 2000-х годов SSI активно использовалась для создания простых динамических сайтов, таких как новостные порталы, форумы и корпоративные страницы, где требовалось включать общие элементы (шапки, подвалы, меню) без дублирования кода.

С развитием более мощных серверных технологий, таких как PHP (1995), ASP (1996) и JSP (1999), популярность SSI снизилась, однако она остаётся востребованной в ряде нишевых областей, включая статические сайты, легковесные веб-приложения и системы управления контентом (CMS) с минимальными требованиями к производительности. В России и других странах SSI продолжает применяться на серверах, работающих под управлением Apache, Nginx и LiteSpeed, особенно в средах с ограниченными ресурсами.

Принцип работы

SSI работает на основе директив, которые встраиваются в HTML-код в виде комментариев. Когда веб-сервер получает запрос на страницу с расширением .shtml, .stm или .shtm (или при настройке сервера для обработки всех HTML-файлов), он сканирует документ на наличие таких директив. При обнаружении сервер выполняет указанное действие (например, вставляет содержимое другого файла, вычисляет дату или проверяет условия) и заменяет директиву результатом. После обработки сервер отправляет готовый HTML-код клиенту.

Основные директивы

SSI включает несколько ключевых директив, которые управляют вставкой контента, условными операциями и переменными. Наиболее распространённые:

  • <!--#include virtual="..." --> — вставляет содержимое другого файла (например, header.html или footer.html) в текущий документ. Атрибут virtual указывает путь относительно корня сайта, а file — относительно текущего каталога.
  • <!--#exec cgi="..." --> — выполняет CGI-скрипт и вставляет его вывод.
  • <!--#echo var="..." --> — выводит значение переменной сервера или окружения (например, DATE_LOCAL для текущей даты или REMOTE_ADDR для IP-адреса клиента).
  • <!--#set var="..." value="..." --> — устанавливает пользовательскую переменную.
  • <!--#if expr="..." -->, <!--#elif expr="..." -->, <!--#else -->, <!--#endif --> — условные конструкции, позволяющие отображать разный контент в зависимости от условий (например, браузера клиента или времени суток).
  • <!--#config timefmt="..." --> — задаёт формат вывода даты и времени.
  • <!--#fsize file="..." --> — выводит размер указанного файла.
  • <!--#flastmod file="..." --> — выводит дату последнего изменения файла.

Пример использования

Пример страницы index.shtml, которая включает общие элементы и отображает текущую дату:

``html <html> <head> <title>Мой сайт</title> </head> <body> <!--#include virtual="/header.html" --> <h1>Добро пожаловать!</h1> <p>Сегодня: <!--#echo var="DATE_LOCAL" --></p> <p>Ваш IP: <!--#echo var="REMOTE_ADDR" --></p> <!--#include virtual="/footer.html" --> </body> </html> ``

После обработки сервером клиент получит HTML с вставленными содержимым header.html и footer.html, а также текущей датой и IP-адресом.

Преимущества и недостатки

Преимущества

  • Простота реализации: SSI не требует установки дополнительных интерпретаторов или библиотек, так как поддержка встроена во многие веб-серверы (Apache, Nginx, LiteSpeed, IIS — через модули).
  • Низкое потребление ресурсов: Директивы обрабатываются сервером на уровне ядра, что делает SSI быстрее и легче по сравнению с PHP или Python для простых задач.
  • Удобство поддержки: Позволяет централизованно управлять общими элементами сайта (шапки, подвалы, навигация) без дублирования кода в каждом файле.
  • Совместимость: Работает с любым статическим HTML-контентом и не требует изменений в клиентской части.
  • Безопасность: Ограниченный набор функций снижает риск уязвимостей, характерных для полноценных серверных языков.

Недостатки

  • Ограниченная функциональность: SSI не поддерживает сложные алгоритмы, работу с базами данных или обработку форм, что делает её непригодной для динамических веб-приложений.
  • Зависимость от расширения файлов: По умолчанию SSI обрабатывает только файлы с расширениями .shtml, .stm или .shtm, что требует переименования или настройки сервера для обработки всех HTML-файлов.
  • Проблемы с кэшированием: Динамически генерируемый контент (например, дата) может нарушать кэширование страниц на стороне клиента или прокси-серверов.
  • Отсутствие отладки: Ошибки в директивах (например, неверный путь к файлу) часто приводят к пустым местам на странице без явных сообщений об ошибке.
  • Устаревание: В современных веб-проектах SSI часто заменяется более гибкими решениями, такими как шаблонизаторы (Jinja2, Twig) или фреймворки (Django, Laravel).

Применение

SSI используется в следующих сценариях:

  • Статические сайты: Для включения общих элементов (шапка, подвал, меню) на сайтах, состоящих из множества HTML-страниц, без использования CMS или серверных языков.
  • Легковесные веб-приложения: В проектах, где требуется минимальная динамика (например, отображение даты или счётчика посещений) без установки PHP или Python.
  • Системы управления контентом: Некоторые CMS, такие как Drupal (в ранних версиях) или Joomla, поддерживают SSI для вставки блоков контента.
  • Хостинг с ограничениями: На дешёвых или shared-хостингах, где не разрешены PHP-скрипты, SSI может быть единственным способом добавления динамики.
  • Тестирование и прототипирование: Для быстрого создания макетов сайтов с повторяющимися элементами.
  • Образовательные цели: В учебных курсах по веб-разработке для демонстрации принципов работы серверных технологий.

Поддержка в веб-серверах

Apache HTTP Server

Поддержка SSI реализована через модуль mod_include, который входит в стандартную поставку Apache. Для активации необходимо включить модуль и настроить обработку файлов с определёнными расширениями (например, .shtml) в конфигурационном файле:

``apache AddType text/html .shtml AddHandler server-parsed .shtml ``

Также можно включить обработку всех HTML-файлов с помощью директивы Options +Includes.

Nginx

В Nginx поддержка SSI реализована через модуль ngx_http_ssi_module, который входит в стандартную сборку. Для включения необходимо добавить директиву ssi on; в блок location:

``nginx location / { ssi on; } ``

Nginx поддерживает большинство стандартных директив SSI, включая include, echo, set, if и config.

LiteSpeed

Веб-сервер LiteSpeed поддерживает SSI через встроенный модуль, аналогичный Apache. Настройка выполняется через файл конфигурации .htaccess или через панель управления.

IIS (Internet Information Services)

В IIS поддержка SSI реализована через модуль Server Side Includes Module, который доступен в виде расширения для Windows Server. Для использования необходимо установить модуль и настроить его через диспетчер IIS.

Безопасность

SSI считается относительно безопасной технологией, однако при неправильной настройке может представлять угрозу. Основные риски:

  • Раскрытие файловой системы: Директивы <!--#include virtual="..." --> и <!--#exec cgi="..." --> могут быть использованы для доступа к конфиденциальным файлам (например, /etc/passwd), если сервер не ограничивает пути. Для предотвращения этого рекомендуется отключать exec и ограничивать include только каталогами с веб-контентом.
  • Инъекции через переменные: Если пользовательский ввод (например, через URL-параметры) передаётся в SSI-директивы без фильтрации, это может привести к выполнению произвольных команд.
  • Уязвимости в CGI-скриптах: Использование <!--#exec cgi="..." --> может привести к выполнению вредоносных скриптов, если CGI-программа небезопасна.

Для минимизации рисков рекомендуется:

  • Отключать директиву exec в конфигурации сервера (например, Options -Includes в Apache).
  • Использовать только относительные пути в директиве include.
  • Ограничивать доступ к файлам за пределами корневого каталога сайта.
  • Регулярно обновлять веб-сервер и модули SSI.

Сравнение с альтернативами

ТехнологияСложностьПроизводительностьГибкостьОбласть применения
SSIНизкаяВысокаяНизкаяСтатические сайты, простые динамические элементы
PHPСредняяСредняяВысокаяДинамические веб-приложения, CMS
ASP.NETВысокаяСредняяВысокаяКорпоративные веб-приложения
Python (Django)ВысокаяСредняяВысокаяСложные веб-приложения, API
JavaScript (Node.js)СредняяСредняяВысокаяРеальные приложения, серверные API

SSI остаётся актуальной для проектов, где важны простота и минимальное потребление ресурсов, но не требуется сложная логика.

Интересные факты

  • SSI была одной из первых технологий, позволяющих создавать динамические веб-страницы, задолго до появления PHP и ASP.
  • В ранних версиях Apache (до 1.3) SSI использовалась для включения баннеров и счётчиков посещений.
  • Некоторые хостинг-провайдеры в России (например, Beget, Timeweb) до сих пор поддерживают SSI в базовых тарифах как альтернативу PHP.
  • Технология SSI вдохновила создание более мощных шаблонизаторов, таких как Apache Velocity и Thymeleaf.
  • В 2020-х годах SSI иногда используется в статических сайтах, генерируемых с помощью статических генераторов (например, Jekyll или Hugo), для вставки динамических данных, таких как дата или IP-адрес.

Источники

  • Apache Software Foundation. «mod_include — Apache HTTP Server Version 2.4».
  • Nginx Documentation. «Module ngx_http_ssi_module».
  • Microsoft Docs. «Server Side Includes Module for IIS».
  • RFC 3875 — The Common Gateway Interface (CGI) Version 1.1.
  • Книга: «Apache: The Definitive Guide» by Ben Laurie and Peter Laurie (O'Reilly Media, 2002).
  • Статья: «Server-Side Includes: A Beginner's Guide» на сайте DigitalOcean (2019).
  • Учебные материалы по веб-разработке: «Основы SSI» на портале HTML Academy (Россия, 2021).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →