Защита файлов Скрытной Наны.

Как защитить документы Скрытной Наны, должно быть понятно из предыдущего документа. Теперь встаёт вопрос о файлах (изображениях, архивах, видео, и т.п.), выложенных на страницах документов внутри Закрытой Зоны, а также прилинкованных оттуда в виде материалов для скачивания.

Методика защиты ссылок и объектов.

Под таковыми подразумеваются записи вида:

   <a href="/demo.jpg" >Ссылка на картинку</a>
   <
img src="/demo.jpg" alt="Это объект">

Понятно, что если объект (картинка) откуда-то подгружается, и отображается на странице, либо предлагается для скачивания в виде ссылки, то в таком виде этот объект никак не защитить.

Однако можно класть объект не в доступную область сайта, а в такое место, браузер куда просто не адресуется. Например, мы знаем, что папка ./data/ и всё, что глубже, недоступны из Web-a, а документы в них могут быть получены в браузер только через скрипты движка CMS, и никак иначе. Вот и хорошо, воспользуемся этим.

Учреждаем скрипт, который будет смотреть в HTML код документа, находить в нём объекты, и отдавать их только тем пользователям, у которых есть авторизация в Закрытой Зоне. А не авторизованным пользователям, соответственно, ничего не давать.

Все объекты, требующие защиты, Вам придётся писать в HTML код документа вот таким способом:

   <a href="'.attache('demo.jpg').'" >Ссылка на картинку</a>
   <
img src="'.attache('demo.jpg').'" alt="Это объект">

Где находятся защищаемые объекты?

В папке ./data/modules/hidden/files/

На что особо обратить внимание?

Вот такая структура документа не будет работать:

<?php /* Выше этой строки в файле ничего не должно быть */

   
include($_s['loc']['modul'].$_s['hidden']['base'].'_hidden.php');
   if (
h_access()) {
      
$_s['title']='Тайтл документа для авторизованного пользователя':
      
$_s['content']=<<<content
         <h2>Тайтл документа</h2>
         <p>HTML код для авторизованного пользователя.</p>
         <img 
            src="'.attache('demo.jpg').'"
            alt="объект"
         >
content;
   }

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Если код вызывает ошибку при использовании на Вашем сайте, кликните, чтобы узнать причину.

В контейнере <<<content ... content; PHP-скрипты не исполняются. Но сам контейнер удобен тем, что отсекает HTML код от окружающего PHP и его синтаксиса. А так как вместо классической ссылки необходимо вызвать аттачер, дабы получить от него специальный URL, мы не сможем это реализовать без поддержки PHP кода внутри контейнера.

С другой стороны, совершенно точно зная, как именно аттачер преобразовывает имена подопечных документов в результирующие URL-ы, мы вправе написать код так (и он уже будет работать):

<?php /* Выше этой строки в файле ничего не должно быть */

   
include($_s['loc']['modul'].$_s['hidden']['base'].'_hidden.php');
   if (
h_access()) {
      
$_s['title']='Тайтл документа для авторизованного пользователя':
      
$_s['content']=<<<content
         <h2>Тайтл документа</h2>
         <p>HTML код для авторизованного пользователя.</p>
         <img 
            src="https://nanocms.name/hidden/demo/control_file_demo_jpg.htm"
            alt="объект"
         >
content;
   }

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Если код вызывает ошибку при использовании на Вашем сайте, кликните, чтобы узнать причину.

А это рабочий вариант, рекомендуемый к использованию:

<?php /* Выше этой строки в файле ничего не должно быть */

   
include($_s['loc']['modul'].$_s['hidden']['base'].'_hidden.php');
   if (
h_access()) {
      
$_s['title']='Тайтл документа для авторизованного пользователя':
      
$_s['content']='
         <h2>Тайтл документа</h2>
         <p>HTML код для авторизованного пользователя.</p>
         <img 
            src="'
.attache('demo.jpg').'"
            alt="объект"
         >
      '
;
   }

/* Ниже этой строки в файле ничего не должно быть. */ ?>
Плюсы данного способа защиты файлов:

Каким бы образом не была проставлена ссылка на защищаемый документ, через аттачер или напрямую, она не привязана ни к адресу странички, в коде которой фигурирует, ни к той или иной Закрытой Зоне, каковых на сайте разрешается иметь неограниченной количество. Так что перенос документа в иерархии сайта никак не скажется на работоспособности ссылки - её менять не надо. Важно лишь, чтобы документ сайта был в пределах действия одной из Закрытых Зон, ибо за пределами Закрытой Зоны такая ссылка работать ни за что не станет.

Минусы:

Так как расширение ссылки, пропущенной через аттачер, всегда совпадает с рабочим расширением файлов Наны, а реальное расширение защищаемого файла входит в URL лишь на уровне ЧПУ, софт, получающий такой файл, может впасть в растерянность. Как правило, это примитивный софт, оценивающий файл данных только по его расширению, а не MIME-типу. Например, плеер какой-нибудь.