Первая строка index.php шаблона сайта <?php defined('_JEXEC') or die('Access denied'); ?>

В этой статье разберёмся с безопасностью при создании шаблона сайта. При сборке страницы сайта Joomla использует файл index.php шаблона, выбранного в качестве шаблона по умолчанию для запрашиваемой старицы сайта. Этот файл должен запускаться только при условии, что он вызывается в среде формирования страницы самой Joomla, иначе это может привести к непредсказуемым последствиям и стать угрозой в безопасности сайта.



Первая строка индексного файла index.php шаблона сайта <?php defined('_JEXEC') or die('Access denied'); ?> в Joomla 3

Итак, первой строчкой индексного файла index.php шаблона сайта должна быть строка:

<?php defined('_JEXEC') or die('Access denied'); ?>

Почему первой строчкой индексного файла index.php шаблона сайта должна быть строка <?php defined('_JEXEC') or die('Access denied'); ?>

Допустим, мы не будем писать эту строку в index.php шаблона сайта. К чему это приведёт? Что-то сломается?

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

https://site.ru/index.php

Тогда в чём смысл этой строки? Смысл в том, что этот файл может быть открыт не только внутри Joomla, используя роутер (маршрутизатор) Joomla, но и напрямую из папки шаблона, например так:

https://site.ru/templates/template_name/index.php

Ведь ни для кого не секрет того, как хранятся шаблоны сайта в Joomla. И при прямом доступе к этому файлу, без использования механизмов защиты Joomla, можно попробовать подать на вход этому файлу информацию, которая послужит ключём для взлома сайта. Поэтому, для того чтобы закрыть эту возможность, в Joomla встроен механизм проверки того, что файл шаблона index.php открывается из среды Joomla, а не напрямую. И, если файл открывается в среде Joomla, то переменной (на самом деле, константе) _JEXEC присваивается значение 1. Если же файл index.php открывается напрямую в обход Joomla, то константа _JEXEC оказывается не определена.

Именно это и происходит в первой строке:

  • если _JEXEC=1, то код в файле index.php выполнятся дальше;
  • если _JEXEC не определена (в процессе работы Joomla), то срабатывает условие die и работа скрипта прерывается (взлом не возможен).

Ещё раз приведу это условие:

<?php defined('_JEXEC') or die('Access denied'); ?>

Выводы

Таким образом, начиная код с проверки того, определена ли константа _JEXEC, можно использовать встроенную в Joomla систему защиты от возможных угроз, которые могут возникнуть при запуске скриптов напрямую, минуя логику проверок Joomla.

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню