KFM — Kae’s File Manager. Правильно интегрируем в CMS

kfmНедавно я поднимал вопрос о безопасности файловых менеджеров-аплоадеров и в частности безопасности iBrowser. Если бы не вопрос безопасности, интеграция менеджеров свелась бы к простому копированию и распаковке файлов.

Как заставить менеджеры использовать авторизацию? Самый лобовой вариант — это хак менеджера. Рассмотрим реализацию на примере KFM и Kohana

Начальная диспозиция
==========================
Рассмотрим какие у нас есть возможности.

KFM — все настройки находятся в главном настроечном файле configuration.php. Есть там настройки полезные, есть интересные. Кстати, надо заметить, что там есть возможность включения родной авторизации KFM, но понятно, нас это не устроит. Главное что нас интересует в этом файле — это то, что он включается при вызове любого скрипта этого движка, а значит этот файл идеальное место для внедрения своей проверки на авторизацию.

Итак, общая схема действий такова. В configuration.php встраиваем проверку авторизации. Как это сделать — сильно зависит от конкретной CMS.

Рассмотрим случай привязки к Kohana Auth. В этом модуле действует настолько суровое шифрование пароля, что абсолютно не имеет смысла дёргать базу данных, мучиться с паролями и прочим. Есть только одна возможность — проверять сессию.

Действия на стороне приложения Kohana
=========================================
Самое простое — создать простенький контроллер, который говорит, есть у вас некое право, или нет. Предположим, что для загрузки файлов нужна роль «admin». Этот скрипт выдаст

  • Yes — в случае наличия у текущего пользователя таких прав,
  • No — в случае их отсутствия или отсутствия авторизации вообще
logged_in($role))
            echo "Yes";
        else
            echo "No";
    }

}

?>

Теперь для проверки своих полномочий пользователю достаточно обратиться к URL http://мойсайт/logged/check/admin

Действия на стороне KFM
==============================
Менеджеру KFM осталось только обратиться к этому URL. Очень важно при обращении сохранять пользовательскую сессию. Это особенно актуально потому, что обращение идёт не от браузера пользователя.

Вот мой configuration.php


Вместо заключения
==========================
Кстати, наверняка также можно было бы хакнуть и iBrowser. Главное найти в нём такую же общую точку.