НАЧАЛО >> Оглавление >> Сервер приложений ИРБИС 64/128 >> Ядро системы >> ObjectModule >> Кеш и защитные ограничения ObjectModule📄 Скачать в DOCX
ObjectModule использует общий класс Cache для ускорения повторной загрузки настроек и записи модуля. В той же области изменены защитные проверки, которые ограничивают имена модулей, классов и внешних функций безопасным набором символов.
При инициализации модуля настройки читаются из записи типа MODULE. После чтения состояние сохраняется в ключ ModuleOpts/<ModuleName>. При следующем обращении модуль может восстановить значения из кеша без повторного чтения записи и разбора административных переменных.
SID записи модуля хранится отдельно в ключе ModuleRecordsCache/<ModuleName>. Этот ключ используется, когда системе нужно быстро получить запись модуля по имени.
Если настройки изменились, нужно сбросить кеш модуля через ClearCache() или через действие, которое его вызывает. Сброс удаляет оба ключа:
ModuleOpts/<ModuleName>;ModuleRecordsCache/<ModuleName>.Запись модуля является обычной записью Record. Поэтому на нее дополнительно распространяется кеш содержимого записи:
Record_Content_<db>_<mfn>;Record_SidMap_<sid>.Это означает, что при диагностике устаревших данных нужно различать два уровня: кеш параметров модуля (ModuleOpts/ModuleRecordsCache) и кеш содержимого конкретной записи (Record_Content/Record_SidMap). Подробнее см. кеширование содержимого записи и SID.
UseModule() принимает только имена из латинских букв, цифр и символа _. Если имя содержит другой символ, функция возвращает null и формирует предупреждение. Такая проверка защищает от подстановки пути вместо имени модуля.
UseClass() удаляет последовательности .. и нулевой байт из имени класса перед построением пути к файлу в classes.
Магический метод ObjectModule->__call() проверяет имя внешней функции перед загрузкой файла из папки __call. Имя с недопустимыми символами или .. не загружается.
Методы LinkAdd() и LinkDrop() получают параметры через General->GetRequest(), а не напрямую из $_REQUEST. Это сохраняет единый путь чтения входных параметров и упрощает дальнейшую валидацию.
Если после изменения настройки модуль продолжает работать со старым значением, нужно проверить:
Record_Content_*;